2012-12-13 135 views
-1

当我试图做一个SQL查询。 你的SQL语法有错误;检查对应于你的MySQL服务器版本使用附近“\'[email protected] \” LIMIT 1' 在第1行 成品查询正确的语法手册:MySQL语法错误(PHP)

SELECT * FROM `members` WHERE `email` = \'[email protected]\' LIMIT 1 
$sql = "SELECT * FROM `members` WHERE `email` = '$email' LIMIT 1"; 

我失去的东西?

+0

有问题的手册:http://dev.mysql.com/doc/refman/5.0/en/string-literals.html – elclanrs

+0

请不在于它的'$ email'应该是通过'mysql_real_escape_string'传递,而不是完整的查询。但更好的是使用准备好的语句。 – Jim

回答

1

为什么你的电子邮件附近有那些\?这就是你的语法错误所在,从你收到的错误信息中可以看出。

+0

我在通过msql_real_escape_string传递之后打印出查询。 – user1681891

+0

@ user1681891实际上使用'mysql_real_escape_string'并不能完全保护您免受sql注入,请参阅http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string/ 5741264#5741264 –

+0

@ user1681891您不会转义整个查询,只会转义您插入的变量数据。 –

4

这个查询将完全执行罚款,

$sql = "SELECT * FROM `members` WHERE `email` = '$email' LIMIT 1"; 

但是不要逃上查询本身,因为字符串必须用单引号引起来的单引号,删除\

SELECT * FROM `members` WHERE `email` = '[email protected]' LIMIT 1 

请被遗忘的你的代码在PHP中容易受到SQL Injection的影响,请阅读下面的文章以保护自己不受影响SQL Injection

+0

这就是为什么查询被转义了,我只是打印出最终查询后,它已被过滤和逃脱。 – user1681891