Ошибка в синтаксисе sql.

Я пытаюсь узнать лучший способ писать запросы. Я также понимаю важность того, чтобы быть последовательным.

$query = "INSERT INTO table (id, col1, col2) VALUES (NULL, val1, val2)";

Кроме того, в приведенном выше примере рассмотрим, что "table," "col[n]," and "val[n]" могут быть переменными.

Каков стандарт для этого? Что вы делаете?

Я читал ответы на подобные вопросы около 20 минут, но, похоже, нет окончательного ответа на этот вопрос.

Здесь было много полезных ответов, в основном достигающих двух точек.

BACKTICKS() `используются вокруг имен идентификаторов. QUOTES(") используются вокруг значений.

И как @MichaelBerkowski сказал

Backticks должны использоваться для идентификаторов таблиц и столбцов, но необходимы только тогда, когда идентификатор является зарезервированным ключевым словом MySQL или когда идентификатор содержит пробельные символы или символы за пределами ограниченного набора (см. ниже). Рекомендуется избегать использования зарезервированных ключевых слов в качестве идентификаторов столбцов или таблиц, когда это возможно, во избежание проблемы с кавычками.

Существует случай, когда идентификатор не может быть зарезервированным ключевым словом или содержать пробелы или символы, находящиеся за пределами ограниченного набора, но обязательно требуют обратных ссылок вокруг них.

123E10 является допустимым именем идентификатора, но также действительным INTEGER литералом.

[Не вдаваясь в подробности, как вы получите такое имя идентификатора], Предположим, что я хочу создать временную таблицу с именем 123456e6.

Нет ОШИБКИ на обратных шагах.

DB > create temporary table `123456e6` (`id` char (8)); Query OK, 0 rows affected (0.03 sec)

ОШИБКА, если вы не используете обратные сигналы.

DB > create temporary table 123451e6 (`id` char (8)); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near "123451e6 (`id` char (8))" at line 1

Однако 123451a6 отлично имя идентификатора (без обратных тиков).

DB > create temporary table 123451a6 (`id` char (8)); Query OK, 0 rows affected (0.03 sec)

Это полностью, потому что 1234156e6 также является экспоненциальным числом.

Помимо всех (хорошо объясненных) ответов, не было упомянутых ниже, и я часто посещаю этот Q & amp; A.

В двух словах; MySQL думает, что вы хотите сделать математику в своей таблице / столбце и интерпретируете дефисы, такие как «электронная почта», как e минус mail.

MySQL думает, что вы хотите сделать математику . Поэтому я думал, что добавлю это как ответ типа «FYI» для тех, кто совершенно не знаком с работа с базами данных и которые могут не понимать технические термины, описанные уже.

В основном в Mysql, эти типы идентификаторов используются в запросах `, ", " и ().

Одиночные кавычки следует использовать для строковых значений, например, в списке VALUES ().

Backticks обычно используются для указания идентификатора и также могут быть безопасными из-за случайного использования зарезервированных ключевых слов.

В сочетании PHP и MySQL двойные кавычки и одинарные кавычки значительно упрощают время записи запросов.

Существует два типа кавычек в MySQL:

" для включения строковых литералов ` для включения идентификаторов, таких как имена таблиц и столбцов

И тогда есть ", что является частным случаем. Он может использоваться для одной из вышеупомянутых целей за раз в зависимости от сервера MySQL sql_mode:

" для включения строковых литералов В режиме ANSI_QUOTES кнопка " может использоваться для обозначения идентификаторов, как `

Следующий запрос приведет к различным результатам (или ошибкам) ​​в зависимости от режима SQL:

SELECT "column" FROM table WHERE foo = "bar"

ANSI_QUOTES отключен [ ! d13]

Запрос будет выбирать строковый литерал "column", где столбец foo равен строке "bar"

ANSI_QUOTES включен

Запрос выберет столбец column, где столбец foo равен столбцу bar

В сочетании PHP и MySQL двойные кавычки и одинарные кавычки значительно упрощают время написания запросов.

$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, "$val1", "$val2")";

Теперь предположим, что вы используете прямую переменную post в MySQL-запросе, тогда используйте ее следующим образом:

$query = "INSERT INTO `table` (`id`, `name`, `email`) VALUES (" ".$_POST["id"]." ", " ".$_POST["name"]." ", " ".$_POST["email"]." ")";

Это лучшая практика для использования переменных PHP в MySQL.

Я использую последнюю версию MySQL ==> mysql-5.6.10-winx64.zip

Создал базу данных, и все в порядке «я думаю», когда я пытаюсь выполнить эту простую команду;

"select * from family"

Я получил эту ошибку:

Код ошибки 1064, состояние SQL 42000: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «OPTION SQL_SELECT_LIMIT = DEFAULT» в строке 1

Я потратил много времени на поиск решения, но решение не было найдено:(

Я получил ту же ошибку, когда я сбрасывал файл структуры таблицы mysql в DB. Ошибка помещала Синтаксис для удаления всей таблицы раньше, но не проверяла их существование в базе данных. Проблема была в « DROP TABLE usermgmt ». Я удалил этот код строк отбрасывающих таблиц, и на этот раз он испустил любую ошибку.

Это похоже на ошибку, исходящую от драйвера JDBC. Когда драйвер JDBC инициализирует соединение, он отправляет несколько команд на сервер MySQL, один из которых:

SET OPTION SQL_SELECT_LIMIT=DEFAULT

Проблема в том, что синтаксис SET OPTION устарел в течение некоторого времени и теперь больше не действует в MySQL 5.6. Ниже приведена соответствующая ошибка в базе данных MySQL:

Попробуйте обновить драйвер JDBC MySQL. В разделе «Ошибка» перечислены некоторые другие варианты, если обновление драйвера не является вариантом.

Я следовал инструкциям выше, и это сработало для меня!

    Загрузите последний файл jar отсюда: http://dev.mysql.com/downloads/mirror.php?id=412737 Разархивируйте его Скопируйте файл jar «mysql-connector-java-5.1.25-bin.jar» в эту папку: C: \ Program Files \ NetBeans 7.3 \ ide \ modules \ ext

    В среде Netbeans IDE: Отключиться от базы данных. Нажмите «Службы». Развернуть драйверы. Щелкните правой кнопкой мыши на MySQL и нажмите «Настроить». Добавить последний драйвер. Удалите предыдущий драйвер.

    Повторно подключитесь к dabatase в среде IDE.

Если предложение драйвера не работает, проверьте свой sql для непечатаемых символов. Я только что потратил час, чтобы устранить эту проблему, только чтобы обнаружить скрытый символ u + 200b в конце моей инструкции sql.

У меня была та же проблема несколько недель назад. Последовали следующие шаги, и это очень решило проблему.

    Скопировала последнюю версию (mysql-connector-java-5.1.23-bin) файла jar в. \ NetBeans 7.3 \ ide \ modules \ ext. Моя предыдущая версия драйвера была mysql-connector-java-5.1.18-bin.

    Измените версию драйвера в среде IDE NetBeans. В окне Службы IDE разверните Драйверы -> щелкните правой кнопкой мыши на MySQL (драйвер Connector / J) и выберите «Настроить». Удалите предыдущий драйвер и укажите его на последний (C: \ Program Files (x86) \ NetBeans 7.3 \ ide \ modules \ ext \ mysql-connector-java-5.1.23-bin.jar). Нажмите ok и перезапустите IDE.

Это должно решить проблему.



ошибка 1064 mysql (5)

Это похоже на ошибку, исходящую от драйвера JDBC. Когда драйвер JDBC инициализирует соединение, он отправляет несколько команд на сервер MySQL, один из которых:

SET OPTION SQL_SELECT_LIMIT=DEFAULT

Проблема в том, что синтаксис SET OPTION устарел в течение некоторого времени и теперь больше не действует в MySQL 5.6. Ниже приведена соответствующая ошибка в базе данных MySQL:

Попробуйте обновить драйвер JDBC MySQL. В разделе «Ошибка» перечислены некоторые другие варианты, если обновление драйвера не является вариантом.

Я использую последнюю версию MySQL ==> mysql-5.6.10-winx64.zip

Создал базу данных, и все в порядке «я думаю», когда я пытаюсь выполнить эту простую команду;

"select * from family"

Я получил эту ошибку:

Код ошибки 1064, состояние SQL 42000: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «OPTION SQL_SELECT_LIMIT = DEFAULT» в строке 1

Я потратил много времени на поиск решения, но решение не было найдено:(

Если предложение драйвера не работает, проверьте свой sql для непечатаемых символов. Я только что потратил час, чтобы устранить эту проблему, только чтобы обнаружить скрытый символ u + 200b в конце моей инструкции sql.

У меня была та же проблема несколько недель назад. Последовали следующие шаги, и это очень решило проблему.

    Скопировала последнюю версию (mysql-connector-java-5.1.23-bin) файла jar в. \ NetBeans 7.3 \ ide \ modules \ ext. Моя предыдущая версия драйвера была mysql-connector-java-5.1.18-bin.

    Измените версию драйвера в среде IDE NetBeans. В окне Службы IDE разверните Драйверы -> щелкните правой кнопкой мыши на MySQL (драйвер Connector / J) и выберите «Настроить». Удалите предыдущий драйвер и укажите его на последний (C: \ Program Files (x86) \ NetBeans 7.3 \ ide \ modules \ ext \ mysql-connector-java-5.1.23-bin.jar). Нажмите ok и перезапустите IDE.

Это должно решить проблему.

Я получил ту же ошибку, когда я сбрасывал файл структуры таблицы mysql в DB. Ошибка помещала Синтаксис для удаления всей таблицы раньше, но не проверяла их существование в базе данных. Проблема была в « DROP TABLE usermgmt ». Я удалил этот код строк отбрасывающих таблиц, и на этот раз он испустил любую ошибку.

Я префикс имени таблицы с именем базы данных, таким как

Select * from database_name.table_name;

и он работал отлично, поэтому, скорее всего, есть конфликт имен.