$categories_query ="SELECT p.products_id
, p.products_quantity
, p.products_price
, p.products_status
,p.products_image
, pd.products_name
FROM products_description AS pd
INNER JOIN products AS p
ON p.products_id = pd.products_id
WHERE p.products_status = 1 and p.products_id <> $pid and pd.products_name LIKE CONCAT(LEFT('$products_name',10),'%')";
即使没有相关项目,某些页面也正常运行。但$products_name
为A Bug's Life "Multi Pak" Special 2003 Collectors Edition
时。它显示错误:
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 's Life "Multi Pak" Special 2003 Collectors Edition',10),'%')' at line 11
in:
[SELECT p.products_id...
为什么呢?以及如何纠正它?
答案 0 :(得分:2)
您需要在$ product name上使用mysql_real_escape_string()。 “'”是该错误的原因,mysql_real_escape_string()将解决这个问题。你应该总是在将所有变量发送到mysql之前过滤掉所有变量,否则你冒着通过恶意sql codel注入mysql的风险。 mysql_real_escape_string() on php.net
答案 1 :(得分:1)
$ products_name的示例值包含'符号,因此sql查询搞砸了。
目前,您的部分查询会是那样的
......(LEFT('Bug's Life“Multi Pak”特别2003年收藏家版“,10)......
请注意,'g和s之间'结束“第一个撇号,而且其余的$ products_name不是执行查询中的字符串值。
您应该使用预准备语句。您还应该针对当前代码的漏洞进行谷歌“sql注入攻击”。
编辑:您可以使用
我个人更喜欢PDO。有理由,请参阅mysqli or PDO - what are the pros and cons?。