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() を呼び出しています。これは、SQL インジェクションによるハッキングを防ぐために、MYSQL コマンド (POST や GET など) で使用する PHP コードの外部から来るすべてのデータに対して呼び出す必要があります。または、さらに良いのは、パラメーター化されたクエリ/準備されたステートメントを読んで使用することです。

于 2013-11-14T01:04:20.460 に答える