Rumah > Soal Jawab > teks badan
P粉3846792662023-08-09 13:15:28
Anda mempunyai dua masalah:
Anda tidak menggunakan sintaks bind yang betul.
Anda cuba memasukkan berbilang baris dalam satu pernyataan yang disediakan
if (isset($_POST['checkbox_selected'])) { $sql = "INSERT INTO map (user_id, feed_id, attribute_id, csvcolumn) VALUES (?, ?, ?, ?);"; // prepare only has to happen once $stmt = mysqli_prepare($conn,$sql); mysqli_begin_transaction($conn); try { foreach ($_POST['checkbox_selected'] as $key => $value) { $findrow = array_search_partial($attributeid, $value); $attribute = $value; $csv = $csvcolumn[$findrow]; $stmt->bindParam('iiii', $userid, $feed_id, $attribute, $csv); $stmt->execute(); } mysqli_commit($conn); } catch(mysqli_sql_exception $e) { mysqli_rollback($conn); // immediately roll back changes throw $e; // re-throw exception } }
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.]