Backticks harus digunakan untuk pengidentifikasi tabel dan kolom, tetapi hanya diperlukan ketika pengidentifikasi adalah kata kunci yang disediakan oleh MySQL , atau ketika pengidentifikasi berisi karakter spasi putih atau karakter di luar rangkaian terbatas (lihat di bawah) Sering disarankan untuk menghindari menggunakan kata kunci yang dipesan. sebagai pengidentifikasi kolom atau tabel bila memungkinkan, hindari masalah penawaran.
Kutipan tunggal harus digunakan untuk nilai string seperti dalam VALUES()
daftar. Kutipan ganda didukung oleh MySQL untuk nilai string juga, tetapi tanda kutip tunggal lebih banyak diterima oleh RDBMS lain, jadi itu kebiasaan yang baik untuk menggunakan tanda kutip tunggal, bukan ganda.
MySQL juga mengharapkan DATE
dan DATETIME
nilai-nilai literal dikutip secara tunggal sebagai string seperti '2001-01-01 00:00:00'
. Lihat dokumentasi Literal Tanggal dan Waktu untuk detail lebih lanjut, khususnya alternatif untuk menggunakan tanda hubung -
sebagai pembatas segmen dalam string tanggal.
Jadi, dengan menggunakan contoh Anda, saya akan mengutip dua kali string PHP dan menggunakan tanda kutip tunggal pada nilai-nilai 'val1', 'val2'
. NULL
adalah kata kunci MySQL, dan nilai khusus (bukan), dan karenanya tidak dikutip.
Tak satu pun dari pengidentifikasi tabel atau kolom ini adalah kata-kata yang dicadangkan atau menggunakan karakter yang memerlukan penawaran, tetapi saya tetap mengutipnya dengan backticks (lebih lanjut tentang ini nanti ...).
Fungsi asli RDBMS (misalnya, NOW()
dalam MySQL) tidak boleh dikutip, meskipun argumen mereka tunduk pada string yang sama atau aturan mengutip pengidentifikasi yang telah disebutkan.
Backtick (`)
tabel & kolom ──────┬─────┬──┬──┬──┬────┬──┬──────┬────┬──┬ ───────┐
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
$ query = " INSERT INTO` table` (`id`,` col1`, `col2`,` date`, `updated`)
VALUES (NULL, 'val1', 'val2', '2001-01-01', NOW ()) ";
↑↑↑↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑↑↑↑↑
Kata kunci tanpa tanda kutip ─────┴┴┴┘ │ │ │ │ │ │ │││││
Kutipan tunggal (') ───────────┴──────┴────┘ │ │ │││││
Dikutip tunggal (') DATE ────────────────────────────────────┘ ┘ │
Fungsi tanpa tanda kutip ──────────────────────────────────────┴┴┴┴┘
Interpolasi variabel
Pola kutip untuk variabel tidak berubah, meskipun jika Anda bermaksud untuk menginterpolasi variabel secara langsung dalam string, itu harus dikutip dua kali dalam PHP. Pastikan Anda telah benar-benar lolos dari variabel untuk digunakan dalam SQL. ( Disarankan menggunakan API yang mendukung pernyataan yang disiapkan, sebagai perlindungan terhadap injeksi SQL ).
// Hal yang sama dengan beberapa penggantian variabel
// Di sini, nama tabel variabel $ tabel dikutip dengan backtick, dan variabel
// dalam daftar VALUES adalah tanda kutip tunggal
$ query = "INSERT INTO` $ table` (`id`,` col1`, `col2`,` date`) VALUES (NULL, '$ val1' , '$ val2' , '$ val2' , '$ date' ) ";
Pernyataan yang disiapkan
Saat bekerja dengan pernyataan yang disiapkan, bacalah dokumentasi untuk menentukan apakah placeholder pernyataan harus dikutip atau tidak. API paling populer yang tersedia di PHP, PDO dan MySQLi, mengharapkan placeholder yang tidak dikutip, seperti halnya API pernyataan paling siap 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 backtick mengutip dalam pengidentifikasi:
Menurut dokumentasi MySQL , Anda tidak perlu mengutip (backtick) pengidentifikasi menggunakan set 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 mengutip (backtick) mereka.
"tablename"
, dan tanda kutip tunggal untuk literal, misalnya'this is a some text'
. Back-ticks tidak pernah digunakan dalam SQL standar. (Jika Anda perlu menyertakan tanda kutip ganda dalam pengenal, ketikkan dua kali sebagai"odd""tablename"
. Demikian pula, tanda kutip tunggal tunggal dalam literal, misalnya'Conan O''Brien'
.)