Backticks tablo ve sütun tanımlayıcıları için kullanılmalıdır, ancak yalnızca tanımlayıcı MySQL ayrılmış bir anahtar kelime olduğunda veya tanımlayıcı, sınırlı bir kümenin ötesinde boşluk karakterleri veya karakterler içerdiğinde gereklidir (aşağıya bakın) Ayrılmış anahtar kelimeler kullanmaktan kaçınılması önerilir tırnak işaretinden kaçınarak mümkün olduğunda sütun veya tablo tanımlayıcıları olarak.
VALUES()
Listedeki gibi dize değerleri için tek tırnak kullanılmalıdır . Çift tırnaklar da dize değerleri için MySQL tarafından desteklenir, ancak tek tırnaklar diğer RDBMS tarafından daha yaygın olarak kabul edilir, bu nedenle çift yerine tek tırnak kullanmak iyi bir alışkanlıktır.
MySQL ayrıca değişmez değerler DATE
ve DATETIME
değişmez değerlerin dize gibi tek tırnak içine alınmasını bekler '2001-01-01 00:00:00'
. Consult Tarih ve Zaman Değişmez tire kullanarak özellikle alternatiflerde daha fazla ayrıntı için dokümantasyon, -
tarih dizeleri bir segmenti ayırıcı olarak.
Yani örneğinizi kullanarak, ben PHP dize çift tırnak ve değerleri tek tırnak kullanırsınız 'val1', 'val2'
. NULL
bir MySQL anahtar kelimesi ve özel (non) bir değerdir ve bu nedenle alıntı yapılmamıştır.
Bu tablo veya sütun tanımlayıcılarının hiçbiri ayrılmış sözcük değildir veya tırnak işareti gerektiren karakterleri kullanmaz, ancak yine de bunları ters tırnaklarla alıntıladım (daha sonra bu konuda ...).
RDBMS'ye özgü işlevler (örneğin, NOW()
MySQL'de), bağımsız değişkenleri daha önce belirtilenle aynı dizeye veya tanımlayıcı alıntı kurallarına tabi olmasına rağmen alıntı yapılmamalıdır.
Backtick (`)
tablo ve sütun ───────┬─────┬──┬──┬──┬────┬──┬────┬──┬────┬──┬ ───────┐
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
$ query = " Tabloya GİRİN" (`id`,` col1`, "col2`," tarih`, "güncellendi`)
DEĞERLER (NULL, 'val1', 'val2', '2001-01-01', ŞİMDİ ()) ";
↑↑↑↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑↑↑↑↑
Alıntı yapılmayan anahtar kelime ─────┴┴┴┘ │ │ │ │ │ │ │││││
Tek tırnaklı (') dizeler ───────────┴────┴──┴────┘ │ │ │││││
Tek tırnaklı (') DATE ───────────────────────────┴──────────┘ ││││ │
Belirtilmemiş işlev ─────────────────────────────────────────┴┴┴┴┘
Değişken enterpolasyon
Değişkenler için tırnak kalıpları değişmez, ancak değişkenleri doğrudan bir dizede enterpole etmek istiyorsanız, PHP'de çift tırnak içine alınmalıdır. SQL'de kullanmak için değişkenlerden düzgün bir şekilde kaçtığınızdan emin olun. ( Bunun yerine SQL enjeksiyonuna karşı koruma olarak hazırlanan ifadeleri destekleyen bir API kullanılması önerilir ).
// Bazı değişken değişimlerle aynı şey
// Burada, değişken tablosu adı $ tablosu ters tırnak işaretli ve değişkenler
// DEĞERLER listesindeki tek tırnak
$ query = " $ table` (IN id`, `col1`,` col2`, `date`) VALUES (NULL, '$ val1' , '$ val2' , '$ date' )";
Hazırlanan ifadeler
Hazırlanan ifadelerle çalışırken, ifadenin yer tutucularının alıntılanması gerekip gerekmediğini belirlemek için belgelere bakın. PHP, PDO ve MySQLi'de mevcut olan en popüler API'ler, diğer dillerde hazırlanan en hazır deyim API'leri gibi alıntılanmamış yer tutucular bekler :
// 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 (?, ?, ?, ?)";
Tanımlayıcılarda backtick tırnak işareti gerektiren karakterler:
MySQL belgelerine göre , aşağıdaki karakter kümesini kullanarak tanımlayıcıları alıntılamanıza (backtick) gerek yoktur:
ASCII: [0-9,a-z,A-Z$_]
(temel Latin harfleri, 0-9 arası rakamlar, dolar, alt çizgi)
Örneğin boşluklar dahil tablo veya sütun tanımlayıcıları, ayarlarındakinden ötesinde karakterleri kullanabilirsiniz, ancak o zaman gerekir (backtick) onlardan alıntı.
"tablename"
tek tırnaklar değişmez değerler içindir'this is a some text'
. Geri keneler hiçbir zaman standart SQL'de kullanılmaz. (Bir tanımlayıcıya çift tırnak eklemeniz gerekiyorsa, bunu iki kez olarak yazın"odd""tablename"
. Benzer şekilde, değişmez değerlerde çift tek tırnak işareti gibi'Conan O''Brien'
.)