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

Primer Duplikat Pelanggaran Integritas Mysql/PDO - meskipun belum ada di tabel

Senang Anda menyelesaikan ini. Namun, ini dimaksudkan untuk mengatasi alasan mengapa bindParam() tidak bekerja untuk Anda. Ini bukan bug, ini bekerja dengan cara ini berdasarkan desain.

Sesuai dengan dokumen :

(penekanan pada saya)

Mempertimbangkan hal di atas, ini:

 87                         foreach($rowdata as $rowname => $rowvalue)
 88                         {
 89                                 $stmt->bindParam(':'.$rowname, $rowvalue);
 90                         }

...akan mengikat setiap parameter ke $rowvalue dengan referensi yang, pada saat eksekusi kueri, akan selalu 1 (elemen terakhir dari $rowdata )

Cara membuatnya bekerja menggunakan bindParam() akan menjadi seperti:

 87                         foreach($rowdata as $rowname => $rowvalue)
 88                         {
 89                                 $stmt->bindParam(':'.$rowname, $rowdata[$rowname]);
 90                         }

...atau, mungkin, bahkan:

 87                         foreach($rowdata as $rowname => &$rowvalue)
 88                         {
 89                                 $stmt->bindParam(':'.$rowname, $rowvalue);
 90                         }

...sehingga setiap parameter akan mereferensikan elemen larik yang sesuai .

Alternatifnya, seperti dikutip di atas, adalah bindValue() yang mengikat parameter berdasarkan nilai daripada dengan referensi. Artinya parameter akan dievaluasi pada saat bindValue() dipanggil dan bukan pada saat dibutuhkan (yaitu eksekusi kueri):

 87                         foreach($rowdata as $rowname => $rowvalue)
 88                         {
 89                                 $stmt->bindValue(':'.$rowname, $rowvalue);
 90                         }

Tentu saja, alternatif lainnya adalah memberi makan execute() dengan larik parameter, yang memungkinkan execute() selesaikan bagian yang mengikat (jadi favorit pribadi saya!) .



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

  2. Kolom tidak ditemukan:1054 laravel kolom tidak diketahui

  3. Apakah ada yang setara untuk multi_query() MySQL di PDO?

  4. php mysql server hilang

  5. Bagaimana cara membandingkan 2 daftar dan menggabungkannya dengan Python/MySQL?