Отправка данных из html t mysql Ошибка [дубликат]

Похоже, что что-то не так с вашей конфигурацией, вот несколько вещей, которые вы можете проверить:

  1. Убедитесь, что PHP установлен и работает правильно. Это может показаться глупым, но вы никогда не знаете. Простой способ проверить - запустить php -v из командной строки и посмотреть, возвращает ли информация о версии или какие-либо ошибки.
  2. Убедитесь, что модуль PHP указан и раскомментирован внутри вашего httpd.conf Apache. должно быть что-то вроде LoadModule php5_module "c:/php/php5apache2_2.dll" в файле. Найдите LoadModule php и убедитесь, что перед ним нет комментария (;).
  3. Убедитесь, что в файле httpd.conf Apache есть PHP MIME-тип. Это должно быть что-то вроде AddType application/x-httpd-php .php. Это говорит Apache, чтобы запустить .php файлы как PHP. Найдите AddType, а затем убедитесь, что есть запись для PHP, и что она раскоментирована.
  4. Убедитесь, что ваш файл имеет расширение .php на нем или любое расширение, указанное в определении MIME в point # 3, иначе он не будет выполняться как PHP.
  5. Убедитесь, что вы не используете короткие теги в файле PHP (), это не включен на всех серверах по умолчанию, и их использование не рекомендуется. Вместо этого используйте (или включить короткие теги в вашем php.ini с short_open_tag=On, если у вас есть код, который их использует).
  6. Убедитесь, что вы обращаетесь к своему файлу через ваш веб-сервер, используя URL-адрес, такой как http://localhost/file.php, не через доступ к локальному файлу file://localhost/www/file.php

И, наконец, проверьте Руководство по PHP для дальнейших советов по настройке .

48
задан 11 revs, 4 users 51% 3 December 2014 в 11:04
поделиться

1 ответ

Проблема

В MySQL некоторые слова типа SELECT, INSERT, DELETE и т. д. являются зарезервированными словами. Поскольку они имеют особое значение, MySQL рассматривает его как синтаксическую ошибку всякий раз, когда вы используете их в качестве имени таблицы, имени столбца или другого идентификатора - если вы не окружите идентификатор обратными выводами.

Как отмечено в официальные документы в разделе 10.2 Имена объектов схемы (выделено мной):

Определенные объекты в MySQL, включая базу данных, таблицу, индекс, столбец, псевдоним, хранимые процедуры, разделы, табличное пространство и другие имена объектов известны как идентификаторы .

...

Если идентификатор содержит специальные символы или является зарезервированное слово , вы должны ссылаться на него всякий раз, когда вы ссылаетесь на него.

...

Символ кавычки идентификатора - это backtick ("`"):

Полный список ключевых слов и зарезервированных слов можно найти в разделе 10.3 Ключевые слова и зарезервированные слова . На этой странице слова, за которыми следует «(R)», являются зарезервированными словами. Некоторые зарезервированные слова перечислены ниже, в том числе многие, которые имеют тенденцию вызывать эту проблему.

  • ADD
  • AND
  • ПЕРЕД
  • BY
  • CALL
  • CASE
  • CONDITION
  • DELETE
  • DESC
  • DESCRIBE
  • FROM
  • GROUP
  • IN
  • INDEX
  • INSERT
  • INTERVAL
  • IS
  • KEY
  • LIKE
  • LIMIT
  • LONG
  • MATCH
  • NOT
  • OPTION
  • OR
  • ORDER
  • PARTITION
  • ССЫЛКИ
  • SELECT
  • TABLE
  • TO
  • UPDATE
  • ГДЕ

Решение

У вас есть два варианта.

1. Не используйте зарезервированные слова в качестве идентификаторов

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

У этого есть несколько преимуществ:

  • Это исключает возможность того, что вы или другое разработчик, использующий вашу базу данных, случайно напишет синтаксическую ошибку из-за забывания или не зная, что конкретный идентификатор является зарезервированным словом. В MySQL много зарезервированных слов, и большинство разработчиков вряд ли узнают их все. Не используя эти слова в первую очередь, вы избегаете оставлять ловушки для себя или будущих разработчиков.
  • Средства цитирования идентификаторов различаются между диалектами SQL. Хотя MySQL использует обратные ссылки для цитирования идентификаторов по умолчанию, ANSI-совместимый SQL (и, действительно, MySQL в режиме ANSI SQL, как указано здесь ) использует двойные кавычки для цитирования идентификаторов. Таким образом, запросы, которые цитируют идентификаторы с backticks, менее легко переносятся на другие диалекты SQL.

Чисто ради снижения риска будущих ошибок это обычно более разумный курс действий, чем backtick-quoting идентификатор.

2. Использовать backticks

Если переименование таблицы или столбца невозможно, оберните идентификатор оскорбления в backticks (`), как описано в более ранней цитате из 10.2 Имена объектов схемы .

Пример демонстрации использования (взято из 10.3 Ключевые слова и зарезервированные слова ):

mysql> CREATE TABLE interval (begin INT, end INT);
ERROR 1064 (42000): You have an error in your SQL syntax.
near 'interval (begin INT, end INT)'

mysql> CREATE TABLE `interval` (begin INT, end INT);
Query OK, 0 rows affected (0.01 sec)

Аналогично, запрос из вопроса можно устранить, обернув ключевое слово key в обратные ссылки, как показано ниже:

INSERT INTO user_details (username, location, `key`)
VALUES ('Tim', 'Florida', 42)";               ^   ^
215
ответ дан 14 revs, 6 users 55% 21 August 2018 в 07:12
поделиться
  • 1
    -1. Я думаю, что предлагать использовать начало и конец без обратных ссылок в справочном ответе на этот вопрос особенно злобно. Лучшей практикой является использование backticks, period, без необходимости знать, какое ключевое слово зарезервировано или не зарезервировано. – Marc Alff 7 May 2014 в 08:53
  • 2
    @MarcAlff: begin и end являются зарезервированными словами not . Приведенный выше пример должен был продемонстрировать, как сообщение об ошибке может быть разрешено с использованием обратных ссылок. И просто не использовать зарезервированное слово - это более эффективная практика, чем слепое обратное цитирование всех идентификаторов, даже если они не нужны. – Amal Murali 7 May 2014 в 09:01
  • 3
    Я согласен, что решение 1 лучше, когда кто-то действительно может выбрать имена идентификаторов. Когда имя не может быть изменено, как в решении 2, нужно выяснить, какие идентификаторы являются ключевыми словами, и если эти ключевые слова зарезервированы или нет (даже в будущих версиях?), Является источником осложнений. BTW, удалил -1, поскольку пример действительно исходит из руководства. – Marc Alff 7 May 2014 в 09:11
  • 4
    Новые зарезервированные слова создаются часто в MySQL с новыми выпусками. Например, NONBLOCKING в MySQL 5.7. Котировка систематически имеет тенденцию быть более устойчивой к изменениям и помогает обновлениям. Что касается удаления -1, я был оптимистом. Вы правы, мое удаление не удалось из-за этого таймера. – Marc Alff 7 May 2014 в 09:29
  • 5
    Это не сработало для меня в sql server 2008. Вместо этого я использовал [] большие скобки. Например: [интервал], который сделал трюк для меня. Надеюсь, это полезно кому-то на всякий случай – wingskush 26 June 2015 в 11:16
Другие вопросы по тегам:

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