如何在PHP中处理SQL查询中的单引号?

时间:2011-08-15 07:36:17

标签: php mysql

我正在使用特定查询来插入记录。一切顺利。我甚至用选择查询获取记录。但我的问题是,如果记录包含单引号'',那么它会给我这个错误:

> NOTE: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 'B''' at line 1

SELECT查询是:

$result= mysql_query("SELECT s.name, 
                             s.sid as sid, 
                             s.category, 
                             p.name as pname 
                         FROM poet p 
                         INNER JOIN song s 
                            ON p.pid = s.pid 
                         WHERE s.name= '$sid'") or die(mysql_error());

我该怎么做才能跳过引号问题。当我想在我的记录中插入引号时。

3 个答案:

答案 0 :(得分:4)

你的问题比这更糟糕 - 如果有人输入值'; DROP TABLE poet; --怎么办?您需要使用mysql_real_escape_string()来转义值,或使用参数化查询(例如,使用PDO)。

2011年,大声喊叫。为什么SQL注入仍然是一个普遍存在的问题?

答案 1 :(得分:1)

你必须逃避数据

$sid = mysql_real_escape_string($sid);

答案 2 :(得分:0)

在字符串上使用http://www.php.net/manual/en/function.mysql-real-escape-string.php函数引用“'”和其他特殊符号 防止注入的其他方法 - 使用具有不同插入和选择权限的不同连接(登录密码)。在这种情况下,mysql_real_escape_string wi9ll工作正常