剛纔我看到下面的代碼,但不明白爲什麼「,也有」使用。謝謝!PHP逃避問題
$sql='SELECT uid,name FROM users WHERE user="'.mysql_real_escape_string($_POST['login_name']).'" AND ..
剛纔我看到下面的代碼,但不明白爲什麼「,也有」使用。謝謝!PHP逃避問題
$sql='SELECT uid,name FROM users WHERE user="'.mysql_real_escape_string($_POST['login_name']).'" AND ..
這是一個PHP程序編寫一個SQL查詢(並將其存儲在一個字符串。)
目標SQL看起來是這樣的:
SELECT uid,name FROM users WHERE user="something" AND …
所以在PHP方面:
$foo = 'SELECT uid,name FROM users WHERE user="something" AND …'
但是你想用動態數據替換「某物」。在這種情況下,發佈的login_name - 但對MySQL安全。
$foo = 'SELECT uid,name FROM users WHERE user="' .
mysql_real_escape_string($_POST['login_name']) .
'" AND …'
更好的方法是使用prepared statements。
看起來像被用於PHP代碼如何形成的單引號查詢和雙引號是用於查詢本身
可以隨時呼應了$ sql中值看單/雙引號執行SQL對一個數據庫之前的外觀。
類似:
$sql='SELECT uid,name FROM users WHERE
user="'.mysql_real_escape_string($_POST['login_name']).'";
// Print the SQL
echo $sql."<br />";
不應該有。
「正確的」 $sql
可能是這樣的:
$sql="SELECT uid,name FROM users WHERE user='".mysql_real_escape_string($_POST['login_name'])."';
您在SQL中使用'說這是一個字符串/文字。
我建議你看看prepared statements,我不信任mysql_real_escape_string
也不mysql_very_real_seriously_this_is_the_real_escape_string
,即php-syndrome不信任。
的「將字面上包含在最終的MySQL的請求,以便請求發送到MySQL數據庫將是:
SELECT uid,name FROM users WHERE user="loginname" AND ..
單引號圍繞SQL語句(「SELECT ...」),雙引號括住字段「用戶」的數據(儘管我會用相反的方式使用引號)。
查詢會是這個樣子(使用單引號):
SELECT uid FROM users WHERE user='snake'
爲此查詢分配給變量$ sql中,你必須放在引號,使用雙引號這個時候,所以PHP不承擔,該字符串之前「蛇」結尾:
$sql = "SELECT uid FROM users WHERE user='snake'";
正如你不會總是被要求「蛇」靜態,你交換「蛇」與動態的名字,退出/再次使用雙引號輸入$ sql-string:
$sql = "SELECT uid FROM users WHERE user='" . $dynamic . "'";
如果您只想要一種類型的引號,則必須轉義括住用戶字符串的引號。
單引號用於在PHP中定義您的字符串。雙擊在你的SQL查詢中分隔你的文本字段(login_name)。
這樣做是爲了避免轉義查詢的引號(如果使用相同的話)。
你可以使用單引號或雙引號在php中包裝字符串。但是,有差異。
使用單引號字符串,不能內聯變量(例如:$a = 'hi $name'
),也不能轉義字符(例如:$a = 'hi!\n$name'
)。
這裏是一個很好的總結:http://www.jonlee.ca/php-tidbit-single-quotes-vs-double-quotes/
同樣在一個側面說明..不知道如果雙引號應該用於SQL字符串包圍。我相信你應該在大多數數據庫中使用單引號。
是的,雙引號是不可移植的,即MS Sql Server使用「字段」來指示字段/表名(MySQL使用'field')。但是,因爲這是PHP,它可以適用於MySQL數據庫,而不是書面的vor可移植性,所以這應該不重要。 – dbemerlin 2010-02-18 13:12:37
他應該使用PDO。 – 2010-02-18 13:11:09
是的,這可能是理解準備好的狀態動物之後的一個自然步驟..不是嗎? – 2010-02-18 13:22:16