Когда окружать поля SQL апострофами? - PullRequest
3 голосов
/ 13 марта 2011

Я замечаю, что когда я INSERT и SELECT значений в базу данных и из нее, я должен заключить поля в одинарные кавычки, например:

mysql_query("INSERT INTO employees (name, age) VALUES ('$name', '$age')");

Однакоесли бы я обновлял возраст, я бы не использовал одинарные кавычки:

mysql_query("UPDATE employees SET age = age + 1 WHERE name = '$name'");

Кроме того, кажется, что при добавлении даты в базу данных SQL мне не нужно ее окружатьс одинарными кавычками:

mysql_query("INSERT INTO employees (name, date) VALUES ('$name', NOW())");

Кроме того, при использовании таких операторов, как CONCAT, в этом также нет необходимости:

mysql_query("UPDATE employees SET name=CONCAT(name,$lastName) WHERE id='$id'");

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

Ответы [ 4 ]

3 голосов
/ 20 июля 2012

«возраст» существует в вопросе как переменная php ($ age) и как имя столбца MySQL.Имена столбцов не должны быть заключены в кавычки (вообще говоря), но содержимое столбца, используемого в операциях выбора или вставки, должно быть заключено в кавычки.

В частности, если содержимое переменной php не имеетЕсли переменная установлена, сама переменная исчезнет, ​​и это может нарушить ваш синтаксис.Окружающие переменные php одинарными кавычками, по крайней мере, защитят синтаксис в случае исчезновения переменной.

SELECT * from something where age = $age;

Если по какой-то причине $ age не был установлен, например, если пользователь не вводил его при вводе, он просто исчезнет, ​​и эта строка кода выдаст синтаксическую ошибку во время выполнения, потому чтоон становится "where age = ;"

SELECT * from something where age = '$age';

Если по какой-то причине $ age не был установлен, он исчезнет, ​​но не выдаст ошибку, потому что он станет "где age = '';"и все еще хороший синтаксис.

В этом случае, конечно, все еще возможно внедрение SQL, но это другой вопрос.

3 голосов
/ 13 марта 2011

Необходимо заключать значения в кавычки, когда тип данных поля имеет значение строка например text, char, varchar и т. Д. Или date типы, такие как date, time, datetime.

Для числовые типы, такие как int,bigint, decimal и т. Д. Или функции SQL, такие как now(), current_date, кавычки не нужны.

1 голос
/ 13 марта 2011

Необходимо различать, что вы видите в запросе:

  • зарезервированные ключевые слова sql: SELECT, UPDATE, WHERE, NULL,... (без учета регистра, но чаще всего используется в верхнем регистре)
  • (sql) операторы и токены синтаксиса: + - / *.() и т. д.
  • sql функции: NOW(), CONCAT(), ...
  • поля, имена таблиц, имена баз данных: сотрудники, возраст, имя, дата, ... которые следует заключать в кавычки с помощью обратных галочек, таких как `field`, чтобы избежать путаницы, например, если вы называете поле ORDER
  • значения

Последняя группа,значения могут быть строковыми литералами, такими как «Джон» или «Джон», или числами, такими как 1, 10, 1e9, 1.005.NULL - это специальное значение, которое вы можете свободно описать как «не установлено».

Числа не обязательно заключать в кавычки, но строковые литералы делают.

Это описаниедалеко не полный или совершенный, но он должен дать вам начало понимания.

0 голосов
/ 13 марта 2011

Строковые значения (включая одиночные символы) должны быть заключены в одинарные кавычки.Это включает в себя константы даты, представленные в виде строк.Числовые значения не нуждаются в кавычках.

...