Binden Sie ein PHP-Array für die SQL-Einfügung
P粉928591383
2023-08-08 15:51:43
<p>Es wird versucht, ein Array zu binden (erste Array-Bindung), um SQL-Injection zu verhindern</p><p>Dies ist gültiger Code: </p><p><br /> ;</p> ;
<pre class="lang-php Prettyprint-override"><code>if (isset($_POST['checkbox_selected']))
{
$valuesArr = array();
foreach ($_POST['checkbox_selected'] as $key => $value) {
//Rufen Sie die Array-ID ab, um die Zeilennummer der CSVOption-Spalte zu finden
$findrow = array_search_partial($attributeid, $value);
//Beim Absenden des Formulars wird der Attributwert der Attribut-ID zugewiesen
$attribute = $value;
$csv = $csvcolumn[$findrow];
$valuesArr[] = "('$userid', '$feed_id', '$attribute', '$csv')";
}
$sql = „INSERT INTO Kartenwerte (Benutzer-ID, Feed-ID, Attribut-ID, CSV-Spalte)“;
$sql .= implode(',', $valuesArr);
mysqli_query($conn,$sql);
}
</code></pre>
<p>Ich kann das Array nicht binden, habe es versucht: </p>
<pre class="brush:php;toolbar:false;">$sql = "INSERT INTO map (user_id, feed_id, attribute_id, csvcolumn) VALUES (?, ?, ? ,?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('iiii', implode(',', $valuesArr));
$stmt->execute();
echo implode(',', $valuesArr)
//('1', '1', '13', '9') //Dies ist das in SQL eingefügte Array
//(user_id, feed_id, attribute_id, csvcolumn) //Hier ist der in der ersten Anweisung zugewiesene Wert</pre>
<p><br /></p>
你有两个问题:
你没有使用正确的bind语法。
你试图在一个预处理语句中插入多行
唯一的微弱好处是,你尝试在一个查询中打包多个VALUES()时,它会被隐式事务包装。但是这种方法的其他方面都是不利的。明确地打开包裹绑定/执行循环的事务,可以获得相同的好处[错误回滚,IO批处理],同时也能利用预处理语句的好处[单个简单查询解析,参数化等]