Обратные кавычки (`) вместо одинарных (') в SQL-запросе?
У меня есть этот код, который частично показан здесь для краткости:
global $wpdb;
// создает таблицу jwp_bids в базе данных, если она не существует
$table = $wpdb->prefix . "jwp_bids";
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table (
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
`bid_amt` text NOT NULL,
Когда я изначально набирал код, я использовал '
внутри скобок, и код не работал.
Затем я заменил одинарные кавычки на обратные, и код заработал идеально.
Пожалуйста, объясните:
- Каков правильный термин для этих необычных кавычек :)
- Почему используются именно они, а не '?
- Это относится только к MySQL? WordPress? PHP?
- Где я могу найти техническую документацию по этому вопросу, чтобы не беспокоить вас, замечательных людей?

Обратные кавычки и обычные кавычки (одинарные и двойные) имеют разное значение в SQL. Кавычки обозначают строковый литерал, тогда как обратные кавычки используются для идентификаторов. Это не специфично для WordPress, а является общим способом в SQL для цитирования столбцов или таблиц.
Например, представьте, что вы выполняете запрос для сравнения двух столбцов:
SELECT * FROM wp_posts WHERE post_name = post_title
Если вы сравните с одинарными кавычками ('post_name' = 'post_title'
), это будет сравнение строковых литералов, которые никогда не будут равны. Однако с обратными кавычками это будет ссылка на столбец.
Зачем вообще использовать обратные кавычки? Если столбец назван так же, как зарезервированное слово в SQL, или содержит пробел, вам нужно заключить его в кавычки. Например, если у вас есть столбец с именем count
, вам нужно будет цитировать его каждый раз, когда вы на него ссылаетесь, так как COUNT()
— это функция (и, следовательно, зарезервированное слово) в MySQL.
См. также https://dba.stackexchange.com/questions/23129/benefits-of-using-backtick-in-mysql-queries

"Если сравнить с одинарными кавычками ('post_title' = 'post_title'), это будет сравнение строковых литералов, которые никогда не равны." На самом деле они выглядят вполне равными. Возможно, вы хотели сказать 'post_name' = 'post_title'?
