我试图在查询中使用mysqli_real_escape_string()函数。
这是我目前的代码:
$Product_Id = substr($prod_name, 14, (strlen($prod_name)-14));
$get_query = "SELECT P FROM Product WHERE Product_Id =' .mysql_real_escape_string((int)$Product_Id))";
这不起作用,它会产生以下错误:
警告:mysqli_fetch_array()要求参数1为mysqli_result,布尔值在
中给出
但如果我删除mysqli_real_escape_string函数,我的代码就可以了。
那么最好的方法是什么,因为我试图阻止sql注入。
答案 0 :(得分:1)
我试图在查询中使用mysqli_real_escape_string()函数。
但实际上并非如此。在您的查询中,您使用的是mysql_real_escape_string()
。
此外,该查询格式不正确,因此无论如何都无法正常工作。你的报价在错误的地方。请尝试以下方法:
$get_query = "SELECT P FROM Product WHERE Product_Id = " . (int) mysqli_real_escape_string($Product_Id);
由于$Product_Id
被强制转换为integer
,因此您无需将其包装在查询中的引号中(假设Product_Id
列是基于整数的;因为您是将它转换为整数,我假设它是。)
将类型转换(int)
从mysqli_real_escape_string()
内的参数移动到实际位于函数之前的是您正在寻找的内容。虽然此时没有必要强制转换$Product_Id
因为它是多余的,并且实际上可能会造成比在某些情况下解决更多的问题(即假设$Product_Id
以某种方式设置为字符串[{{ 1}}],然后你把它转换成一个整数:$Product_Id = 'Marcus'
它返回(int) $Product_Id
,但没有错误)。一个负整数也会滑过,我假设你没有负0
,对吗?在将变量类型发送到查询之前,有更好的方法可以检测和处理变量类型。但我们可以再进入另一次。
在您的查询中,您有一个错误的单引号($Product_Id
)导致解析错误。