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

Melarikan diri dari nama kolom dalam pernyataan PDO

Cara standar ANSI untuk melakukan pengidentifikasi terbatas adalah:

SELECT "field1" ...

dan jika ada " dalam nama, gandakan:

SELECT "some""thing" ...

Sayangnya ini tidak bekerja di MySQL dengan pengaturan default, karena MySQL lebih suka berpikir tanda kutip ganda adalah alternatif dari tanda kutip tunggal untuk literal string. Dalam hal ini Anda harus menggunakan backticks (seperti yang dijelaskan oleh Björn) dan backslash-escaping.

Untuk melakukan pelolosan garis miring terbalik dengan benar, Anda akan perlu mysql_real_escape_string, karena bergantung pada set karakter. Tapi intinya bisa diperdebatkan, karena baik mysql_real_escape_string maupun addlash tidak luput dari karakter backquote . Jika Anda yakin tidak akan pernah ada karakter non-ASCII dalam nama kolom, Anda dapat lolos hanya dengan menghilangkan garis miring terbalik secara manual dari karakter ` dan \.

Either way, ini tidak kompatibel dengan database lain. Anda dapat memberi tahu MySQL untuk mengizinkan sintaks ANSI dengan menyetel opsi konfigurasi ANSI_QUOTES. Demikian pula, SQL Server juga tersedak pada tanda kutip ganda secara default; ia menggunakan sintaks lain, yaitu tanda kurung siku. Sekali lagi, Anda dapat mengonfigurasinya untuk mendukung sintaks ANSI dengan opsi 'quoted_identifier'.

Ringkasan:jika Anda hanya membutuhkan kompatibilitas MySQL:

sebuah. gunakan backquotes dan larang karakter backquote, backslash, dan nul dalam nama karena menghindarinya tidak dapat diandalkan

Jika Anda memerlukan kompatibilitas lintas-DBMS, baik:

b. gunakan tanda kutip ganda dan minta pengguna MySQL/SQL-Server untuk mengubah konfigurasi dengan tepat. Larang karakter kutip ganda dalam nama (karena Oracle tidak dapat menanganinya bahkan melarikan diri). Atau,

c. memiliki pengaturan untuk MySQL vs SQL Server vs Others, dan menghasilkan sintaks backquote, square bracket, atau double-quote tergantung pada itu. Larang tanda kutip ganda dan garis miring terbalik/backquote/nul.

Ini adalah sesuatu yang Anda harapkan akan berfungsi untuk lapisan akses data, tetapi PDO tidak.

Ringkasan ringkasan:nama kolom arbitrer adalah masalah, sebaiknya dihindari jika Anda dapat membantu.

Ringkasan ringkasan ringkasan:gnnnnnnnnnnnh.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menghadapi masalah saat mengonfigurasi MySql dengan aliran udara Apache di Hadoop

  2. Apa perbedaan antara tipe data BLOB dan TEXT di MySQL?

  3. Bagaimana cara memigrasi database SQL Server ke MySQL?

  4. Bagaimana cara mengekspor skema MySQL dengan data?

  5. Impor data hex/biner ke mysql