Mysql
 sql >> база данни >  >> RDS >> Mysql

Кога да използвате единични кавички, двойни кавички и обратни кавички в MySQL

За идентификатори на таблици и колони трябва да се използват обратни отметки, но са необходими само когато идентификаторът е MySQL запазена ключова дума , или когато идентификаторът съдържа знаци за интервал или знаци извън ограничен набор (вижте по-долу) Често се препоръчва да избягвате използването на запазени ключови думи като идентификатори на колона или таблица, когато е възможно, като избягвате проблема с цитирането.

Единични кавички трябва да се използват за стойности на низове като в VALUES() списък. Двойните кавички се поддържат от MySQL и за стойности на низове, но единичните кавички са по-широко приети от другите RDBMS, така че е добър навик да се използват единични кавички вместо двойни.

MySQL също очаква DATE и DATETIME буквалните стойности да бъдат в единични кавички като низове като '2001-01-01 00:00:00' . Консултирайте се с литералите за дата и час документация за повече подробности, по-специално алтернативи на използването на тирето - като разделител на сегменти в низове от дата.

Така че, използвайки вашия пример, бих цитирал двойни кавички PHP низа и бих използвал единични кавички за стойностите 'val1', 'val2' . NULL е ключова дума MySQL и специална (не) стойност и следователно не е в кавички.

Нито един от тези идентификатори на таблица или колона не е запазена дума или не използва знаци, изискващи цитиране, но аз все пак ги цитирах с обратни отметки (повече за това по-късно...).

Функции, които са естествени за RDBMS (например NOW() в MySQL) не трябва да се цитират, въпреки че техните аргументи са обект на същите правила за цитиране на низове или идентификатори, които вече споменахме.

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         ─────────────────────────────────────────┴┴┴┴┘    

Интерполация на променлива

Моделите за кавички за променливи не се променят, въпреки че ако възнамерявате да интерполирате променливите директно в низ, той трябва да бъде в двойни кавички в PHP. Просто се уверете, че правилно сте избягали от променливите за използване в SQL. (Препоръчително е да използвате API, поддържащ подготвени изрази вместо това, като защита срещу 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')";

Подготвени изявления

Когато работите с подготвени изрази, консултирайте се с документацията, за да определите дали заместителите на изявлението трябва да бъдат цитирани или не. Най-популярните API, налични в PHP, PDO и MySQLi, очаквайте без кавички заместители, както правят повечето подготвени приложни програмни интерфейси (API) на други езици:

// 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 (?, ?, ?, ?)";

Символи, изискващи обратни цитати в идентификаторите:

Според документацията на MySQL , не е необходимо да цитирате идентификатори, като използвате следния набор от знаци:

ASCII:[0-9,a-z,A-Z$_] (основни латински букви, цифри 0-9, долар, долна черта)

Можете да използвате знаци извън този набор като идентификатори на таблица или колона, включително празни интервали например, но тогава трябва цитирайте ги (поставете отметка назад).

Освен това, въпреки че числата са валидни знаци за идентификатори, идентификаторите не могат да се състоят само от числа. Ако го направят, те трябва да бъдат увити в тикчета.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Въведение в SQL индексите

  2. Поддръжка на естествен JSON в MYSQL 5.7:какви са предимствата и недостатъците на типа данни JSON в MYSQL?

  3. Как да броим думи в MySQL / заменител на регулярни изрази?

  4. Използвайте MySQL релационни бази данни на Debian 5 (Lenny)

  5. Достъпът е отказан за потребител 'root'@'localhost' (използвайки парола:ДА) (Mysql::Error)