0

我总是收到警告 mysqli_fetch_array() 期望参数 1 是 mysqli_result,布尔值在...中给出。我猜是因为数组项周围没有单引号。我该怎么做?有什么建议可以使此代码更好/更智能/更安全(sql 注入)并且主要工作?我是新手..谢谢

这是代码“我正在使用 json 从 jquery 获取数组”

<?php
include_once("dbconx.php");
$json = $_POST['cats'];
$json_string = stripslashes($json);
$data = json_decode($json_string, true);
echo "<pre>";
print_r($data);
$th= "";
for($i=0; $i < count($data); $i++)
   {
   $th .= $data[$i].',';
   }
   $th = rtrim($th, ",");
     echo $th;
$sql = "SELECT * FROM themes WHERE theme IN ($th)"; 
$query = mysqli_query($db_conx, $sql);
while ($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) { 
}
?>

谢谢你的帮助

4

2 回答 2

1

假设你$data是正确的,而不是那个for循环,你可以这样做:

$data = "'".implode("','",$data)."'";

于 2013-11-14T00:06:36.117 回答
0

只需将单引号放在:

for($i=0; $i < count($data); $i++)
{
  $th .= "'" . mysql_escape_string($data[$i]) . "',";
}

另外,我在数据上调用 mysql_escape_string() 。这需要对您在 MYSQL 命令(例如来自 POST 或 GET)中使用的 PHP 代码之外的每一位数据调用,以防止通过 sql 注入进行黑客攻击。或者,更好的是,阅读并使用参数化查询/准备语句。

于 2013-11-14T01:04:20.460 回答