为什么这是PHP中糟糕的MYSQL查询?

时间:2014-04-24 05:55:54

标签: php android mysql

这是我在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的结果时,我的Android应用程序崩溃了。我该怎么解决这个问题! (注意:我的Android应用程序没有任何问题,我已经彻底检查了它)

为什么这是一个糟糕的查询?我可以做什么让Query不返回布尔值,并返回实际值?

2 个答案:

答案 0 :(得分:0)

您会发现自己的查询失败了

下插入代码
if($result === FALSE) {
    die(mysql_error()); 
}

就在这一行之上

while ($row = mysqli_fetch_assoc($res))

你会发现它死在那里的剧本。

可能是您发布的值存在问题 - 回显您的发布值并查看其是否包含'"等等。

答案 1 :(得分:0)

我想你的$res = mysqli_query($con, "SELECT * FROM $ tablenamep WHERE number=9"); 退货失败。

正如技术细节表

中所说的那样here
  

对于成功的SELECT,SHOW,DESCRIBE或EXPLAIN查询   返回一个mysqli_result对象。对于其他成功的查询,它会   返回TRUE。失败时错误

mysqli_fetch_assoc()函数需要mysqli_result但是查询失败了,为什么它返回boolean而不是object。