$query = "SELECT * FROM `users` WHERE `username` = 'admin'";#works
$query = "SELECT * FROM 'users' WHERE 'username' = 'admin'";#does not work
Является ли это еще одним причудом, к которому мне придется привыкнуть, или что-то смешное происходит?
Одиночные кавычки ('
) и двойные кавычки ("
) используются для указания строк в MySQL. Backticks (`
) используются для ссылок столбца/таблицы.
Второй запрос не будет выполнен по двум причинам:
'users'
указывает строку, а не ссылку на таблицу users
, а FROM
ожидает ссылку .'username' = 'admin'
выполняет сравнение строк, а строка username
никогда не равна строке admin
.Это не легальный синтаксис, чтобы указать имя столбца с помощью
Для цитирования идентификаторов используется `(backtick).
Поскольку ни один из ваших столбцов не является зарезервированным ключевым словом, это тоже сработает:
"SELECT * FROM users WHERE username = 'admin'"
В MySQL по умолчанию одиночные кавычки ('
) и двойные кавычки ("
) являются литеральными разделителями строк, а обратные обратные (`
) - кавычками идентификаторов. Если вы установите режим SQL для включения ANSI_QUOTES, то двойные кавычки будут также скорее кавычками идентификаторов, чем литеральными разделителями строк.