Похоже, что что-то не так с вашей конфигурацией, вот несколько вещей, которые вы можете проверить:
php -v
из командной строки и посмотреть, возвращает ли информация о версии или какие-либо ошибки. LoadModule php5_module "c:/php/php5apache2_2.dll"
в файле. Найдите LoadModule php
и убедитесь, что перед ним нет комментария (;
). AddType application/x-httpd-php .php
. Это говорит Apache, чтобы запустить .php
файлы как PHP. Найдите AddType, а затем убедитесь, что есть запись для PHP, и что она раскоментирована. .php
на нем или любое расширение, указанное в определении MIME в point # 3, иначе он не будет выполняться как PHP.
), это не включен на всех серверах по умолчанию, и их использование не рекомендуется. Вместо этого используйте (или включить короткие теги в вашем php.ini с short_open_tag=On
, если у вас есть код, который их использует).
http://localhost/file.php
, не через доступ к локальному файлу file://localhost/www/file.php
И, наконец, проверьте Руководство по PHP для дальнейших советов по настройке .
В MySQL некоторые слова типа SELECT
, INSERT
, DELETE
и т. д. являются зарезервированными словами. Поскольку они имеют особое значение, MySQL рассматривает его как синтаксическую ошибку всякий раз, когда вы используете их в качестве имени таблицы, имени столбца или другого идентификатора - если вы не окружите идентификатор обратными выводами.
Как отмечено в официальные документы в разделе 10.2 Имена объектов схемы (выделено мной):
Определенные объекты в MySQL, включая базу данных, таблицу, индекс, столбец, псевдоним, хранимые процедуры, разделы, табличное пространство и другие имена объектов известны как идентификаторы .
...
Если идентификатор содержит специальные символы или является зарезервированное слово , вы должны ссылаться на него всякий раз, когда вы ссылаетесь на него.
...
Символ кавычки идентификатора - это backtick ("
blockquote>`
"):Полный список ключевых слов и зарезервированных слов можно найти в разделе 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 Ключевые слова и зарезервированные слова ):
blockquote>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)"; ^ ^
begin
иend
являются зарезервированными словами not i>. Приведенный выше пример должен был продемонстрировать, как сообщение об ошибке может быть разрешено с использованием обратных ссылок. И просто не использовать зарезервированное слово - это более эффективная практика, чем слепое обратное цитирование всех идентификаторов, даже если они не нужны. – Amal Murali 7 May 2014 в 09:01