Soalan:
Dalam kelas PDO yang direka untuk berbilang sisipan, walaupun mencipta pertanyaan berparameter, ralat "Penukaran tatasusunan kepada rentetan" berlaku semasa melaksanakan pertanyaan. Bagaimanakah ralat ini boleh diselesaikan?
Jawapan:
Untuk menyelesaikan ralat ini, satu pendekatan adalah untuk mengulang melalui tatasusunan data dan mengikat nilai satu demi satu menggunakan bindValue bukannya mengikat keseluruhan tatasusunan. Ini memastikan bahawa setiap nilai diikat dengan betul pada parameter tertentu.
Berikut ialah contoh pelaksanaan pendekatan ini:
$query = "INSERT INTO $table (key1, key2, key3) VALUES "; $qPart = array_fill(0, count($data), "(?, ?, ?)"); $query .= implode(",", $qPart); $stmt = $this->start->prepare($query); $i = 1; foreach ($data as $item) { $stmt->bindValue($i++, $item['key1']); $stmt->bindValue($i++, $item['key2']); $stmt->bindValue($i++, $item['key3']); } $stmt->execute();
Sebagai alternatif, anda boleh menggunakan gelung foreach di dalam pernyataan sediakan untuk mengikat nilai bagi setiap baris:
$stmt = $pdo->prepare("INSERT INTO foo VALUES (1, 2, 3)"); foreach($data as $item) { $stmt->execute($item); }
Pendekatan ini melaksanakan pertanyaan beberapa kali, satu untuk setiap baris. Walau bagaimanapun, ia lebih mudah untuk dilaksanakan berbanding pendekatan sebelumnya.
Atas ialah kandungan terperinci PDO MySQL: Bagaimana untuk Memasukkan Berbilang Baris dalam Satu Pertanyaan Tanpa Ralat 'Penukaran Array ke rentetan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!