Ошибка PHP MySQL в инструкции

#php #mysql

#php #mysql

Вопрос:

 INSERT INTO expense (date,desc,price,out,method) 
VALUES ('$time','$desc','$price','$out','$method');
  

Что не так в инструкции MySQL выше? Я проверил все остальные элементы в своем коде, но только это, похоже, глючит.

Я передаю эту инструкцию функции mysql_query() в PHP. Это выдает мне ошибку и не вставляет данные в строку.

Все переменные, указанные выше, также присутствуют.

Итак, в чем может быть проблема?

Комментарии:

1. попытайтесь избежать всех полей, таких как `date`

2. Как насчет того, чтобы сообщить нам сообщение об ошибке?

3. ошибка в синтаксисе рядом с: ЗНАЧЕНИЯМИ desc,price,out, method)(‘1321196048’, ‘d’,’4′,’1′,’ наличные’

4. Пожалуйста, используйте подготовленные инструкции или экранируйте свои переменные, прежде чем использовать их в запросе

Ответ №1:

desc является ключевым словом в SQL ( order by `key` desc ). Вы не можете использовать простые слова, которые также являются ключевыми словами в SQL. В этом случае вы должны экранировать desc с помощью ` символа (like `desc` ). date также является ключевым словом, но MySQL решила разрешить его неправильное использование из-за распространенного использования, прежде чем сделать его ключевым словом. Но не каждый компонент database engine допускает это, поэтому будьте осторожны.

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

Ответ №2:

‘date’ — это ключевое слово MySQL (для типа поля даты). Вы должны заключить имя поля с обратными метками, подобными этому:

 INSERT INTO expense (`date`,desc,price,out,method) 
  

(Я думаю, что с другими полями все в порядке, но вы могли бы добавить к ним обратные ссылки, если хотите)