我总是收到警告mysqli_fetch_array()要求参数1为mysqli_result,boolean在......中给出 我猜它是因为数组项周围没有单引号。我该怎么办?任何建议使这个代码更好/更聪明/更安全(SQL注入),主要工作?我是新来的..谢谢你
这是代码“我从jquery获取json的数组”
<?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)) {
}
?>
感谢您的帮助
答案 0 :(得分:1)
假设您的$data
是正确的,而不是for
循环,您可以这样做:
$data = "'".implode("','",$data)."'";
答案 1 :(得分:0)
只需将单引号放入:
for($i=0; $i < count($data); $i++)
{
$th .= "'" . mysql_escape_string($data[$i]) . "',";
}
另外,我正在调用数据上的mysql_escape_string()。这需要在您使用MYSQL命令(例如来自POST或GET)的PHP代码之外的每一位数据上调用,以防止被sql注入攻击。或者,更好的是,阅读并使用参数化查询/预准备语句。