Как правильно писать mysql запрос?

В интернете, в примерах, в различных учебниках можно найти незначительно отличающийся синтаксис mysql запроса. А именно кавычки ' ` или их отсутствие.

Пример кода из php файла в кодировке utf-8 без bom
$result=$mysqli->query("SELECT `id` FROM `user_settings` where `user_id`=$user_id") or die (mysql_error());


Методом научного тыка выяснено, что можно писать и с кавычками `user_settings` и без user_settings.
И так `user_id`=$user_id и так `user_id`='$user_id'. Но это не точно (может связь с кодировкой?).
(Если что про двойные-одинарные кавычки в php всё знаю)

Скажите, пожалуйста, а как правильно писать mysql запрос и зачем нужны эти кавычки?
  • Вопрос задан
  • 10503 просмотра
Решения вопроса 1
be_a_dancer
@be_a_dancer
Backend/Fullstack Developer
Кавычки экранируют символы.
`обратные кавычки` используются тогда, когда тебе необходимо экранировать название столбца, если оно совпадает с зарезервированным ключевым словом.
'Одинарные кавычки' следует использовать, когда ты пишешь даты и строки.
"Двойные кавычки" следует использовать для написания непосредственного запроса.

Пример
"SELECT `name`, `email`, `registered_at` FROM users WHERE registered_at BETWEEN '23-12-2018' AND '26-12-2018'"


Напоминаю. При запросе в базу данных из скрипта, особенно если ты используешь любые данные полученные от пользователя (от сессий и куки, до полей ввода), следует либо использовать подготовленные запросы в режиме эмуляции, либо перед вставкой данных в запрос осуществлять экранирование строки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
qonand
@qonand
Software Engineer
наклонные кавычки `` используются для экранирования служебных слов базы данных
обычные '' для указания строк

P.S. и отучитесь вставлять неподготовленные переменные в запросы, если не хотите в последствие проблем с sql-инъекциями
Ответ написан
Комментировать
gobananas
@gobananas
finishhim.ru
Названия полей и столбцов всегда желательно обрамлять символом `
Иногда бывает что юзер используетв качестве названия поля зарезервированное слово, например desc, тогда:
WHERE desc не будет работать
WHERE `desc` будет работать

Здесь `user_id`=$user_id и так `user_id`='$user_id'. идут одинарные кавычки для конкатенации, не путайте их с другими, писать `user_id`=`$user_id` нельзя
Ответ написан
@GooseTheDestroyer
Это не исчерпывающий ответ, но из личного опыта.
Кавычки нужны для случаев, когда имя таблицы совпадает с синтаксисом. Т.е. например если у тебя в базе таблица "create", то запрос без кавычек воспримет ее как часть запроса, а не как название таблицы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы