Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PDO dan MySQL UPDATE di Foreach Loop

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()';
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penandaan hierarkis dalam SQL

  2. Cara mengembalikan Objek JSON dari PHP untuk dibaca dari Aplikasi Android

  3. Beberapa Atribut Penghapusan Gabung Dalam

  4. Bagaimana cara menambahkan susun ke kueri laravel

  5. Mysql cara mengatur tipe data waktu menjadi hanya HH:MM di database