Backtick akan digunakan untuk pengidentifikasi tabel dan kolom, tetapi hanya diperlukan ketika pengidentifikasi adalah Kata kunci yang dicadangkan MySQL , atau ketika pengidentifikasi berisi karakter spasi putih atau karakter di luar set terbatas (lihat di bawah) Sering kali disarankan untuk menghindari penggunaan kata kunci yang dicadangkan sebagai pengidentifikasi kolom atau tabel jika memungkinkan, menghindari masalah kutipan.
Tanda kutip tunggal harus digunakan untuk nilai string seperti di VALUES()
daftar. Tanda kutip ganda didukung oleh MySQL untuk nilai string juga, tetapi tanda kutip tunggal lebih diterima secara luas oleh RDBMS lain, jadi merupakan kebiasaan yang baik untuk menggunakan tanda kutip tunggal daripada ganda.
MySQL juga mengharapkan DATE
dan DATETIME
nilai literal yang akan dikutip tunggal sebagai string seperti '2001-01-01 00:00:00'
. Lihat Literal Tanggal dan Waktu dokumentasi untuk detail lebih lanjut, khususnya alternatif penggunaan tanda hubung -
sebagai pemisah segmen dalam string tanggal.
Jadi menggunakan contoh Anda, saya akan mengutip dua kali string PHP dan menggunakan tanda kutip tunggal pada nilai 'val1', 'val2'
. NULL
adalah kata kunci MySQL, dan nilai khusus (non), dan karena itu tidak diberi tanda kutip.
Tak satu pun dari pengidentifikasi tabel atau kolom ini adalah kata-kata yang dicadangkan atau menggunakan karakter yang memerlukan kutipan, tetapi saya tetap mengutipnya dengan tanda centang balik (lebih lanjut tentang ini nanti...).
Fungsi asli RDBMS (misalnya, NOW()
di MySQL) tidak boleh dikutip, meskipun argumennya tunduk pada aturan kutipan string atau pengenal yang sama yang telah disebutkan.
Backtick (`) table & column ───────┬─────┬──┬──┬──┬────┬──┬────┬──┬────┬──┬───────┐ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ $query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`, `updated`) VALUES (NULL, 'val1', 'val2', '2001-01-01', NOW())"; ↑↑↑↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑↑↑↑↑ Unquoted keyword ─────┴┴┴┘ │ │ │ │ │ │ │││││ Single-quoted (') strings ───────────┴────┴──┴────┘ │ │ │││││ Single-quoted (') DATE ───────────────────────────┴──────────┘ │││││ Unquoted function ─────────────────────────────────────────┴┴┴┴┘
Interpolasi variabel
Pola kutipan untuk variabel tidak berubah, meskipun jika Anda bermaksud untuk menginterpolasi variabel secara langsung dalam sebuah string, itu harus dikutip ganda dalam PHP. Pastikan saja Anda telah lolos dari variabel dengan benar untuk digunakan dalam SQL. (Disarankan untuk menggunakan API yang mendukung pernyataan siap pakai sebagai gantinya, sebagai perlindungan terhadap injeksi SQL ).
// Same thing with some variable replacements // Here, a variable table name $table is backtick-quoted, and variables // in the VALUES list are single-quoted $query = "INSERT INTO `$table` (`id`, `col1`, `col2`, `date`) VALUES (NULL, '$val1', '$val2', '$date')";
Pernyataan yang disiapkan
Saat bekerja dengan pernyataan yang disiapkan, lihat dokumentasi untuk menentukan apakah pengganti pernyataan harus dikutip atau tidak. API paling populer yang tersedia di PHP, PDO, dan MySQLi, harap tidak dikutip placeholder, seperti kebanyakan API pernyataan yang disiapkan dalam bahasa lain:
// PDO example with named parameters, unquoted
$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (:id, :col1, :col2, :date)";
// MySQLi example with ? parameters, unquoted
$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (?, ?, ?, ?)";
Karakter yang memerlukan tanda kutip balik dalam pengidentifikasi:
Menurut dokumentasi MySQL , Anda tidak perlu mengutip (backtick) pengidentifikasi menggunakan rangkaian karakter berikut:
ASCII:
[0-9,a-z,A-Z$_]
(huruf Latin dasar, angka 0-9, dolar, garis bawah)
Anda dapat menggunakan karakter di luar yang ditetapkan sebagai pengidentifikasi tabel atau kolom, termasuk spasi putih misalnya, tetapi kemudian Anda harus kutip (backtick) mereka.
Juga, meskipun angka adalah karakter yang valid untuk pengidentifikasi, pengidentifikasi tidak dapat hanya terdiri dari angka. Jika ya, mereka harus dibungkus dengan backticks.