2012-03-06 93 views
0

我有以下查詢:
SELECT * FROM ships WHERE shipCode="SP"
SELECT * FROM ships WHERE shipCode=\"SP\"問題與mysql_real_escape_string

第一工作正常,第二個是在第一個字符串調用mysql_real_escape_string的結果,不能正常工作,並給出了無用的錯誤消息#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"SP\"' at line 1

它有什麼問題?

shipCode是VARCHAR(2)

+1

發佈您的PHP代碼。 MySQL可能會接受單引號字符串,具體取決於它的配置方式,但單引號是標準SQL。 – 2012-03-06 02:00:17

+0

你不應該再使用mysql_ *函數。改爲使用mysqli或Pdo類。 – 2012-03-06 02:09:35

回答

4

你不應該叫mysql_real_escape_string整個字符串。您只在上使用它,並將其連接到查詢中。

錯誤:

$query = 'SELECT * FROM ships WHERE shipCode="' . $var . '"'; 
$query = mysql_real_escape_string($query); 

右:

$query = 'SELECT * FROM ships WHERE shipCode="' . mysql_real_escape_string($var) . '"'; 

更妙的是:Prepared statements.

0

你需要有mysql的設置使用mysql_real_escape字符串之前有效的連接。像這樣做

$attr="sp"; 
Select * from ships where shipcode = '" . mysql_real_escape_string($attr) . "';