#sql #mariadb
#sql #mariadb
Вопрос:
INSERT INTO "order" SET `user_id` = 5, `week_id` = 1, `box_settings_id` = '1', `delivery_day` = 'Thursday', `delivery_time` = 'Morning 6am - 9am', `notes` = '', `recipes` = '70, 71, 72, 74';
Что не так с моим SQL-запросом? Я получаю эту ошибку в phpMyAdmin:
#1064 - 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 '"order" SET `user_id` = 5, `week_id` = 1, `box_settings_id` = '1', `delivery_day' at line 1
Пока отладчик SQL не показывает никакой ошибки.
Комментарии:
1. @forpas хорошо, итак, я использую это
INSERT INTO person SET first_name = 'John', last_name = 'Doe';
, я делаю что-нибудь неправильно?2. forpas предположил, что вы ошибочно смешали синтаксис insert и update. Я также никогда не видел такого нестандартного синтаксиса, который вы используете. Мне пришлось посмотреть это, что, очевидно, сделал и forpas 🙂
3. @ThorstenKettner форпас — подлый человек, которого я полностью проигнорировал после его последнего комментария, и в итоге он удалил sigh . Люди здесь излишне придирчивы. 🙁
4. Иногда мы ошибаемся. Когда я увидел ваш запрос, я был абсолютно уверен, что ваш синтаксис был неправильным. А затем я увидел, что forpa удалили свой комментарий, что заставило меня посмотреть этот синтаксис. Да, было бы намного лучше, если бы они сказали «Извините, я ошибся». Я согласен. однако forpas написал много хороших ответов и помог множеству людей. Иногда с простыми комментариями. И иногда мы звучим немного грубо, но мы действительно здесь, чтобы помочь.
5. @ThorstenKettner Я, честно говоря, не возражаю, слова лично мне никогда не вредят, я просто возражаю против тех, кто быстро переходит к «-1». Все хорошо. 🙂
Ответ №1:
Проблема, вероятно, связана с использованием двойных кавычек, которые MySQL и MariaDB расходятся со стандартом ANSI SQL. Вместо двойных кавычек (синонимичных одинарным кавычкам для строковых литералов) MariaDB и MySQL использовали бы обратные метки. С учетом сказанного, вы можете настроить режим SQL на не стандартный ANSI
или ANSI_QUOTES
для поддержки двойных кавычек для идентификаторов:
ANSI_QUOTES
Изменения"
должны обрабатываться как `, символ кавычки идентификатора. Это может привести к поломке старых приложений MariaDB, которые предполагают, что «используется в качестве символа строковой кавычки.
Поэтому просто используйте обратные метки в order
таблице, как вы делаете для столбцов. Как правило, любой идентификатор может использовать обратные ссылки.
INSERT INTO `order`
SET `user_id` = 5,
`week_id` = 1,
`box_settings_id` = '1',
`delivery_day` = 'Thursday',
`delivery_time` = 'Morning 6am - 9am',
`notes` = '',
`recipes` = '70, 71, 72, 74';
Комментарии:
1. Или, что еще лучше, вообще удалите двойные кавычки и обратные знаки. Они здесь не нужны. 😉
2. Я не знал об этом. Я использую это в node.js Я изучу, как я могу избежать обратных ссылок. Большое вам спасибо.
3. @ThorstenKettner,
order
это зарезервированное слово в MariaDB .4. @ThorstenKettner Они каким-то образом есть, «порядок» — это зарезервированное ключевое слово.