Ikat tatasusunan PHP untuk sisipan SQL
P粉928591383
2023-08-08 15:51:43
<p>Cuba mengikat tatasusunan (mengikat tatasusunan pertama) untuk menghalang suntikan SQL</p><p>Ini adalah kod yang sah: </p><p><br /> ;</p> ;
<pre class="lang-php prettyprint-override"><kod>if (isset($_POST['checkbox_selected']))
{
$valuesArr = array();
foreach ($_POST['checkbox_selected'] sebagai $key => $value) {
// Dapatkan ID Tatasusunan untuk mencari nombor baris lajur CSVOption
$findrow = array_search_partial($attributeid, $value);
//Apabila borang diserahkan, nilai atribut diberikan kepada id atribut
$atribut = $nilai;
$csv = $csvcolumn[$findrow];
$valuesArr[] = "('$userid', '$feed_id', '$attribute', '$csv')";
}
$sql = "MASUKKAN KE DALAM peta (user_id, feed_id, attribute_id, csvcolumn) nilai ";
$sql .= implode(',', $valuesArr);
mysqli_query($conn,$sql);
}
</code></pre>
<p>Saya tidak dapat mengikat tatasusunan, cuba: </p>
<pre class="brush:php;toolbar:false;">$sql = "INSERT IN TO map (user_id, feed_id, attribute_id, csvcolumn) NILAI (?, ?, ? ,?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('iiii', implode(',', $valuesArr));
$stmt->execute();
echo implode(',', $valuesArr)
//('1', '1', '13', '9') //Ini ialah tatasusunan yang dimasukkan ke dalam SQL
//(user_id, feed_id, attribute_id, csvcolumn) //Berikut ialah nilai yang diberikan dalam pernyataan pertama</pre>
<p><br /></p>
Anda mempunyai dua masalah:
Anda tidak menggunakan sintaks bind yang betul.
Anda cuba memasukkan berbilang baris dalam satu pernyataan yang disediakan
Satu-satunya faedah yang sedikit ialah apabila anda cuba membungkus berbilang VALUES() dalam satu pertanyaan, ia akan dibalut oleh transaksi tersirat. Tetapi aspek lain dari pendekatan ini adalah merugikan. Membuka transaksi yang membungkus gelung pengikatan/pelaksanaan secara eksplisit, anda mendapat faedah yang sama [kembali balik ralat, kumpulan IO], sambil turut mengambil kesempatan daripada faedah penyataan yang disediakan [penghuraian pertanyaan mudah tunggal, parameterisasi, dll.]