Sebagai permulaan, Anda menggunakan bindParam()
seperti bindValue()
, mereka sangat berbeda
.
Tanpa melihat dari mana Anda mendapatkan nilai array, agak sulit untuk melihat apa yang terjadi dengan pasti. Sepertinya informasi yang Anda berikan kemungkinan bukan kode yang Anda gunakan dan telah dimodifikasi, terutama mengenai loop foreach dan variabel data_array karena apa yang Anda gambarkan adalah masalah umum dengan BindParam jadi itulah asumsi saya akan bekerja pada. Jika demikian, sebaiknya berikan cuplikan kode aktual termasuk inisialisasi variabel yang digunakan dan blok tempat masalah ditemukan, bukan hanya kode di blok tersebut.
Inilah jawaban lain dengan alasannya
, pada dasarnya pastikan Anda melewati dengan referensi bagian nilai dari loop foreach Anda atau Anda mengubah bindParams menjadi bindValues. Anda juga ingin memastikan bahwa Anda menggunakan dua objek terpisah di sini alih-alih satu jika Anda berencana untuk terus menggunakan struktur ini karena Anda menjalankan keduanya bindParam()
metode setiap kali Anda memanggil execute()
.
Jadi sesuatu seperti, katakanlah, apakah struktur kode tidak berubah (yang mungkin seharusnya karena ini semua dalam loop dan hanya Execute yang harus dalam satu lingkaran):
$set_data1 = "UPDATE data_table
SET data_status = 'PROCESSED'
WHERE data_id = :data_id1";
$stmt = $db->prepare($set_data1);
$stmt->bindValue(':data_id1', $data_array1['data_id'], PDO::PARAM_INT);
$stmt->execute();
$set_data2 = "UPDATE data_table
SET data_status = 'PENDING'
WHERE data_id = :data_id2";
$stmt2 = $db->prepare($set_data2);
$stmt2->bindValue(':data_id2', $data_array2['data_id'], PDO::PARAM_INT);
$stmt2->execute();
Cara yang lebih optimal untuk melakukan ini adalah seperti (perlu diingat ini hanya contoh umum):
$set_data = "UPDATE data_table
SET data_status = :data_status
WHERE data_id = :data_id";
$data_array = array( array('data_status' => $dataStatus1, 'data_id' => $dataId), array('data_status' => $dataStatus2, 'data_id' => $dataId2) );
/* this is just to represent a multidimensional array (or a multidimensional object) containing the data status and the data id which should be handled and decided before you pass them into a loop. */
$stmt = $db->prepare($set_data);
$data_status = null;
$data_id = null;
$stmt->bindParam(':data_status', $data_status);
$stmt->bindParam(':data_id', $data_id);
foreach( $data_array as $name => $val ) {
$data_status = $val['data_status'];
$data_id = $val['data_id'];
$stmt->execute()';
}