如何在查询中正确使用mysqli_real_escape_string()函数

时间:2016-04-21 15:20:24

标签: php

我试图在查询中使用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注入。

1 个答案:

答案 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)导致解析错误。