Обратные метки должны использоваться для идентификаторов таблицы и столбца, но они необходимы только в том случае, если идентификатор является зарезервированным ключевым словом MySQL или когда идентификатор содержит пробельные символы или символы за пределами ограниченного набора (см. Ниже). Часто рекомендуется избегать использования зарезервированных ключевых слов. в качестве идентификаторов столбцов или таблиц, когда это возможно, избегая проблемы цитирования.
Одиночные кавычки должны использоваться для строковых значений, как в VALUES()
списке. Двойные кавычки также поддерживаются MySQL для строковых значений, но одинарные кавычки более широко принимаются другими СУБД, поэтому рекомендуется использовать одинарные кавычки вместо двойных.
MySQL также ожидает DATE
и DATETIME
буквальные значения , чтобы быть в одинарных кавычках как строки , как '2001-01-01 00:00:00'
. Обратитесь к документации по -
датам даты и времени для получения более подробной информации, в частности, об альтернативах использованию дефиса в качестве разделителя сегмента в строках даты.
Поэтому, используя ваш пример, я бы заключил в кавычки строку PHP и использовал одинарные кавычки в значениях 'val1', 'val2'
. NULL
является ключевым словом MySQL и имеет специальное (не) -значение, и поэтому не заключено в кавычки.
Ни один из этих идентификаторов таблицы или столбца не является зарезервированными словами и не использует символы, требующие кавычек, но я все равно цитировал их с помощью обратных галочек (подробнее об этом позже ...).
Функции, родные для СУБД (например, NOW()
в MySQL), не должны заключаться в кавычки, хотя их аргументы подчиняются той же самой строке или правилам цитирования идентификаторов, которые уже упоминались.
Backtick (`)
стол и столбец ───────┬─────┬──┬──┬──┬────┬─────┬┬───────┬──┬ ───────┐
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
$ query = " INSERT INTO` table` (`id`,` col1`, `col2`,` date`, `updated`)
VALUES (NULL, 'val1', 'val2', '2001-01-01', NOW ()) ";
↑↑↑↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑↑↑↑↑
Ключевое слово без кавычек ─────┴┴┴┘ │ │ │ │ │ │ │││││
Строки в одинарных кавычках (') ───────────┴────┴──┴────┘ │ │ │││││
Одиночная кавычка (') ДАТА ──────────────────────────┴──────────┘ ││││ │
Функция без кавычек ──────────────────────────────────────────────┴┴┴┴┘
Переменная интерполяция
Шаблоны кавычек для переменных не меняются, хотя, если вы намереваетесь интерполировать переменные непосредственно в строке, они должны быть заключены в двойные кавычки в PHP. Просто убедитесь, что вы правильно экранировали переменные для использования в SQL. ( Вместо этого рекомендуется использовать API, поддерживающий подготовленные операторы, в качестве защиты от внедрения SQL ).
// То же самое с некоторыми заменами переменных
// Здесь имя переменной таблицы $ table заключено в кавычки, а переменные
// в списке ЗНАЧЕНИЙ одинарные кавычки
$ 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 , вам не нужно заключать в кавычки (backtick) идентификаторы, используя следующий набор символов:
ASCII: [0-9,a-z,A-Z$_]
(основные латинские буквы, цифры 0-9, доллар, подчеркивание)
Вы можете использовать символы вне этого набора в качестве идентификаторов таблицы или столбца, в том числе, например, пробелов, но затем вы должны заключить их в кавычки (обратные кавычки).
"tablename"
, и одинарные кавычки для литералов, например'this is a some text'
. Обратные галочки никогда не используются в стандартном SQL. (Если вам нужно включить двойную кавычку в идентификатор, введите его дважды, как"odd""tablename"
. Аналогично, двойные одинарные кавычки в литералах, например'Conan O''Brien'
.)