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

PDO mengirimkan kueri mentah ke MySQL sementara Mysqli mengirimkan kueri yang telah disiapkan, keduanya menghasilkan hasil yang sama

PDO Anda dikonfigurasi untuk mengemulasi kueri yang disiapkan, sedangkan mysqli menggunakan kueri yang benar-benar disiapkan.

Kueri yang disiapkan mengikat string ''1'' sebagai nilai parameter bilangan bulat. PHP memaksanya menjadi integer menggunakan sesuatu seperti intval() . Setiap string dengan karakter utama non-numerik ditafsirkan sebagai 0 oleh PHP, jadi nilai parameter dikirim setelah mempersiapkan adalah nilai 0.

Kueri palsu yang disiapkan menggunakan interpolasi string (bukannya mengikat) untuk menambahkan string ''1'' ke dalam kueri SQL sebelum MySQL mem-parsingnya. Tetapi hasilnya serupa, karena SQL juga memperlakukan string dengan karakter utama non-numerik dalam konteks integer sebagai nilai 0.

Satu-satunya perbedaan adalah apa yang berakhir di log kueri umum ketika parameter terikat sebelum persiapan versus setelah persiapan.

Anda juga dapat membuat PDO menggunakan kueri yang disiapkan secara nyata, jadi PDO harus bertindak seperti mysqli dalam kasus ini:

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

PS:Ini mungkin menunjukkan alasan bagus mengapa nilai id biasanya dimulai dari 1, bukan 0.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menangani kebuntuan innoDB

  2. Periksa apakah catatan mySQL ditambahkan dalam x detik terakhir

  3. Bekerja dengan data spasial dengan Gorm dan MySQL

  4. MySQL/MariaDB - pesan dengan subquery di dalam

  5. MySql mendapatkan hitungan setiap jenis elemen dalam cloumn