MySQL и MariaDB LinuxWindows 1064

MySQL: ERROR 1064 — You have an error in your SQL syntax

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Ошибка 1064 — синтаксическая ошибка в запросе. Ниже — причины и порядок действий от простого к сложному.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Как читать сообщение
  5. Частые случаи
  6. Подготовленные запросы и версии

#Что означает ошибка

1064
ERROR 1064 (42000): You have an error in your SQL syntax

Ошибка MySQL 1064 «You have an error in your SQL syntax» означает, что сервер не смог разобрать запрос. Текст ошибки заканчивается фразой «near '...' at line N» — именно в этом месте нужно искать проблему: она находится прямо перед процитированным фрагментом.

Типичные причины: зарезервированные слова в качестве имён, пропущенные запятые и кавычки, различия версий MySQL/MariaDB.

Разберём способы быстрого поиска.

Ошибка 1064 — синтаксическая ошибка в запросе. Текст сообщения указывает место рядом с ошибкой: проверьте кавычки, запятые, зарезервированные слова и версию MySQL.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Зарезервированное слово как имяorder, group.Заключите в обратные кавычки.
Пропущена запятая или скобкаСтруктура.Исправьте.
Неверные кавычкиТипы.Проверьте.
Синтаксис другой версииMariaDB/MySQL.Проверьте документацию.

#Пошаговое решение

  1. Найдите место near в сообщенииСкопируйте полный текст ERROR 1064 и найдите фрагмент после near ... at line N. В phpMyAdmin откройте нужную базу → вкладка «SQL», вставьте проблемный запрос, но перед запуском запросов UPDATE/DELETE на рабочей базе создайте копию. Указатель near показывает место, где разбор запроса остановился, а ошибка может находиться раньше: проверьте также предыдущую строку, кавычку и запятую.
  2. Проверьте зарезервированные словаПосмотрите, не используется ли имя столбца или таблицы, совпадающее с зарезервированным словом (order, group, key). В SQL-редакторе MySQL обрамляйте такие идентификаторы обратными кавычками, например SELECT order FROM orders``; одинарные кавычки предназначены для строковых значений, а не имён колонок. Если запрос собирает PHP-код, выясните, какую строку он реально отправляет серверу.
  3. Проверьте запятые и скобкиНайдите в запросе непарные круглые скобки, лишнюю запятую перед ) и пропущенную запятую в списке полей. Проверяйте по частям: сначала безопасный SELECT без дополнительных условий, затем постепенно возвращайте JOIN/WHERE/ORDER BY. Для INSERT перечислите количество колонок и значений. Не выполняйте тестовый UPDATE или DELETE без WHERE на производственной базе.
  4. Используйте подготовленные запросыЕсли значения поступают из формы PHP, не вставляйте их конкатенацией в текст SQL. В файле обработчика используйте PDO prepare() с именованными параметрами, затем execute(["email" => $email]) с именем параметра :email в запросе; идентификаторы таблиц и столбцов параметрами не подставляются. Выведите безопасный шаблон SQL и сообщение исключения в закрытый журнал без паролей и персональных данных.
  5. Сверьте версию MySQLПодключитесь к серверу через MySQL CLI или вкладку SQL в phpMyAdmin, выполните только SELECT VERSION(); и сравните фактическую версию MySQL/MariaDB с синтаксисом запроса в официальной документации этой версии. Синтаксис CTE, оконных функций, JSON и некоторые зарезервированные слова различаются. Исправив запрос, повторите его сначала на тестовой базе и проверьте не только отсутствие 1064, но и правильный набор строк.

#Как читать сообщение

Фрагмент после near — первое, что сервер не понял, а ошибка обычно прямо перед ним. Например, near 'order FROM' указывает, что order — зарезервированное слово, его нужно заключить в обратные кавычки: ` order . Сверьте запятые в списке столбцов, парность скобок и кавычек, а также ;` внутри строки. Проверьте на sqlfiddle или в клиенте.

#Частые случаи

Зарезервированные слова (order, group, key, desc, rank, read) в качестве имён. Строки в кавычках без экранирования (O'Brien): используйте подготовленные запросы. Лишняя запятая перед FROM или ). Использование синтаксиса другой СУБД (LIMIT в MS SQL, RETURNING в MySQL). Использование оконных функций и WITH на MySQL до 8.0 / MariaDB до 10.2.

#Подготовленные запросы и версии

В PHP применяйте PDO с плейсхолдерами: $st = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $st->execute([$id]);. Это решает проблему кавычек и защищает от SQL-инъекций. Проверьте версию сервера: SELECT VERSION(); и сверьтесь с документацией dev.mysql.com. Для импорта дампа разных версий добавьте --force и посмотрите, на какой строке падает: mysql -u user -p db < dump.sql.

SQLКоманда
Показывает версию и пример экранирования зарезервированных слов.
SELECT VERSION();
SELECT `order`, `group` FROM `tbl` WHERE `key` = 'x';

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.