SORU
4 Temmuz 2012, ÇARŞAMBA


Tek tırnak kullanmak zaman, çift tırnak, ve backticks?

Yaklaşık 20 dakika burada benzer soruların cevaplarını okuyordum, ama bu soruya kesin bir cevap yok gibi görünüyor.

Acemi bir PHP programcı değilim ve sorgular yazmak için en iyi şekilde öğrenmeye çalışıyorum. Ben de tutarlı olmanın önemini biliyoruz, ve şu ana kadar aslında rasgele gerçek bir düşünce olmadan tek tırnak, çift tırnak, ve backticks kullandım.

Örnek:

$query = 'INSERT INTO table (id, col1, col2) VALUES (NULL, val1, val2)';

Ayrıca, yukarıdaki örnekte, "table," "col[n]," and "val[n]" değişken olabileceğini göz önünde bulundurun.

Bunun için standart nedir? Sen ne yapıyorsun?

CEVAP
4 Temmuz 2012, ÇARŞAMBA


Backticks kullanılacak tablo ve sütun tanımlayıcıları, ama sadece gerektiğinde tanımlayıcısıdır MySQL reserved keyword veya tanımlayıcı içeren boşluk karakterleri veya karakter ötesinde sınırlı bir dizi (aşağıya bakınız) sık sık tavsiye için kullanmaktan kaçının ayrılmış bir anahtar sütun veya tablo tanımlayıcıları zaman mümkün kaçınarak alıntı sorunu.

Tek tırnak VALUES() listedeki gibi dize değerleri için kullanılmalıdır. Çift tırnak dize değerleri için MySQL tarafından desteklenen, ama tek tırnak tek tırnak yerine çift için iyi bir alışkanlıktır çok daha yaygın başka VERİTABANI tarafından kabul edilir.

MySQL de DATE DATETIME hazır değerler '2001-01-01 00:00:00' gibi dizeleri gibi tek tırnaklı olmasını bekler

Bu yüzden örnek olarak kullanarak, çift tırnak PHP dize ve değerlerini tek tırnak işaretleri 'val1', 'val2' kullanırdım. NULL MySQL bir anahtar ve bir özel (olmayan) değerdir, ve bu nedenle tırnaksız.

Tablo veya sütun tanımlayıcıları bunların hiçbiri kelimeler ayrılmış veya karakter gerektiren bir alıntı kullanmak, ama backticks (bu daha sonra daha fazla...) neyse onları alıntı yaptım.

Fonksiyonları TABLOLARINI, NOW() MySQL örneğin) yerel değişkenler aynı dize ya da tanımlayıcı alıntı kuralları zaten söz konusu olmakla birlikte alıntı olmamalıdır.

$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`, `updated`) VALUES (NULL, 'val1', 'val2', '2001-01-01', NOW())";
//-scroll >>>------------------------------------------------------------------------------------------------------ ^^^^^ Unquoted function
//----------------------------------------------------------------------------------------------------^^^^^^^^^^^^ Single-quoted DATE
//-----------------------------------------------------------------------------------^^^^^^^^^^^^^^^ Single-quoted strings
//-----------------------------------------------------------------------------^^^^^ Unquoted keyword
//--------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Backtick table & column

Değişken ilişkilendirme

Değişkenler için Alıntı desenleri eğer değişkenleri doğrudan bir dize eklemek istiyorsanız, çift tırnaklı PHP olmalıdır, ancak değiştirmeyin. Sadece düzgün SQL kullanmak için değişkenleri kaçmış olduğundan emin olun. (It is recommended to use an API supporting prepared statements instead, as protection against SQL injection).

// 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')";

Hazırlanan tablolar

Hazırlanan tablolar ile çalışırken, belgelere veya ifadesinin yer tutucular tırnak gerekir olup olmadığını belirlemek için başvurun. En popüler API PHP, PDO ve MySQLi, bekliyoruztırnaksızen hazırlıklı diğer dillerde API deyim gibi yer tutucular:

// 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 tanımlayıcı alıntı: backtick requring

According to MySQL documentation, (backtick) tanımlayıcıları aşağıdaki karakter kümesini kullanarak alıntı yapmaya gerek yok

ASCII: [0-9,a-z,A-Z$_] (harfler, 0-9, dolar, alt basamak temel Latince)

Örneğin boşluk, ama sonra sen de dahil olmak üzere tablo veya sütun tanımlayıcıları olarak ayarlayın ötesinde karakterlerini kullanabilirsinizgerekiralıntı (backtick).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Washington

    Adam Washing

    12 Mayıs 2006
  • ChrisCrossMedia

    ChrisCrossMe

    17 EYLÜL 2009
  • hockeywebcasts

    hockeywebcas

    31 EKİM 2012