【发布时间】:2014-04-24 05:55:53
【问题描述】:
这是我在 php 中使用的错误 mysql 查询吗?
$tablenamep = $_POST["tablenamep"];
$res = mysqli_query($con, "SELECT * FROM `$tablenamep` WHERE number=9");
所以当我尝试使用以下方法获取结果时:
while ($row = mysqli_fetch_assoc($res))
存在sql注入错误: mysqli_fetch_assoc() 期望参数 1 为 mysqli_result,给定布尔值
我已经阅读了有关此错误的几个问题和答案,但我的问题是为什么查询返回布尔值,而我什至向 $tablenamep 变量添加了一个值。我使用以下代码将值添加到我的 android 应用程序中的变量中:
nameValuePairs.add(new BasicNameValuePair("tablenamep", msg));
代码正在运行并且没有任何错误,但是当我尝试获取 php.ini 的结果时,我的 android 应用程序崩溃了。我该如何解决这个问题! (注意:我的安卓应用没有任何问题,我已经彻底检查过了)
为什么这是一个错误的查询?我该怎么做才能让查询不返回布尔值并返回实际值?
【问题讨论】:
-
因为你是将php变量直接传递给查询..使用参数绑定...
-
我看到很多人在表名和列上使用
`,99% 的时间他们只是这样做,因为他们不知道更好。唯一需要的是变量可能是 mysql reserved keyword -
请保护该查询免受 sql 注入!
-
@NishantSolanki,参数绑定不起作用,因为它是一个表。表名和列名不能与参数绑定一起使用,但是可以采取其他步骤来防止 SQL 注入。
-
OP:返回的布尔值是假的,这意味着查询本身是错误的。独立于 PHP 测试查询,将其回显:
echo "SELECT * FROM $tablenamep WHERE number=9";