8

Когда использовать одинарные кавычки, двойные кавычки и обратные кавычки в MySQL

2

Я пытаюсь разобраться в том, как правильно писать SQL-запросы. Я понимаю, что важно придерживаться единого стиля. До сих пор я использовал одинарные кавычки, двойные кавычки и обратные кавычки совершенно случайным образом, не задумываясь о выборе.

Пример:

$query = 'INSERT INTO table (id, col1, col2) VALUES (NULL, val1, val2)';

Также в приведенном примере следует учитывать, что table, col1, val1 и т.д. могут быть переменными.

Каков стандарт для этого? Как поступаете вы?

5 ответ(ов)

0

Возможно, важно упомянуть, что PHP обрабатывает строки с одинарными и двойными кавычками по-разному...

Строки с одинарными кавычками считаются 'литералами' и в основном отображают то, что вы написали, то есть они WYSIWYG. Строки с двойными кавычками интерпретируются PHP для возможной подстановки переменных (косые кавычки в PHP не являются строками; они выполняют команду в оболочке и возвращают результат).

Примеры:

$foo = "bar";
echo 'there is a $foo'; // there is a $foo
echo "there is a $foo"; // there is a bar
echo `ls -l`; // ... список директорий
0

В MySQL для разделения частей запроса используются следующие символы: ```, ", " и ().

  1. " или ' используются для заключения строковых значений, например, "26-01-2014 00:00:00" или '26-01-2014 00:00:00'. Эти символы предназначены исключительно для строк, а не для агрегатных функций, таких как now, sum или max.

  2. ``` используется для заключения имен таблиц или столбцов, например: select column_namefromtable_name where id='2'.

  3. ( и ) просто служат для группировки частей запроса, например: select column_namefromtable_name where (id='2' and gender='male') or name='rakesh'.

0

На этом ресурсе было много полезных ответов, которые в целом сводятся к двум основным пунктам:

  1. Обратные кавычки (`) используются для имен идентификаторов.
  2. Одинарные кавычки (') используются для значений.

Как отметил @MichaelBerkowski:

Обратные кавычки следует использовать для имен таблиц и столбцов, но они необходимы только в случае, если идентификатор является зарезервированным словом MySQL, или если идентификатор содержит пробелы или символы за пределами ограниченного набора (см. ниже). Часто рекомендуется избегать использования зарезервированных слов в качестве идентификаторов столбцов или таблиц, когда это возможно, чтобы избежать проблем с кавычками.

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

ПРИМЕР

123E10 является допустимым именем идентификатора, но также является допустимым литералом INTEGER.

[Не углубляясь в детали, как можно получить такое имя идентификатора], предположим, я хочу создать временную таблицу с именем 123456e6.

Нет ОШИБКИ с обратными кавычками.

DB [XXX]> create temporary table `123456e6` (`id` char(8));
Query OK, 0 rows affected (0.03 sec)

Есть ОШИБКА, если не использовать обратные кавычки.

DB [XXX]> create temporary table 123451e6 (`id` char(8));
ERROR 1064 (42000): 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 '123451e6 (`id` char (8))' at line 1

Однако 123451a6 является совершенно допустимым именем идентификатора (без обратных кавычек).

DB [XXX]> create temporary table 123451a6 (`id` char(8));
Query OK, 0 rows affected (0.03 sec)

Это совершенно связано с тем, что 123456e6 также является экспоненциальным числом.

0

Строковые литералы в MySQL и PHP одинаковы.

Строка — это последовательность байтов или символов, заключённых в одинарные («'») или двойные («"») кавычки.

Если ваша строка содержит одинарные кавычки, вы можете использовать двойные кавычки для обозначения строки. И наоборот, если строка содержит двойные кавычки, используйте одинарные кавычки. Однако если ваша строка содержит как одинарные, так и двойные кавычки, вам нужно экранировать ту кавычку, которая используется для её обозначения.

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

$query = "INSERT INTO table (id, col1, col2) VALUES (NULL, 'val1', 'val2')";

Также вы можете использовать переменные в строках с двойными кавычками в PHP:

$query = "INSERT INTO table (id, col1, col2) VALUES (NULL, '$val1', '$val2')";

Но если значения $val1 или $val2 содержат одинарные кавычки, это сделает ваш SQL-запрос неправильным. Поэтому вам необходимо экранировать эти кавычки перед использованием в SQL; для этого и предназначена функция mysql_real_escape_string. (Хотя подготовленные выражения являются лучшим подходом.)

0

Использование PHP и MySQL вместе упрощает написание запросов благодаря возможности применения одинарных и двойных кавычек.

Например, вы можете написать запрос так:

$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";

Теперь, если вы хотите использовать переменные, полученные из POST-запроса, ваш код будет выглядеть следующим образом:

$query = "INSERT INTO `table` (`id`, `name`, `email`) VALUES ('".$_POST['id']."', '".$_POST['name']."', '".$_POST['email']."')";

Однако, важно отметить, что данный подход может привести к уязвимостям, связанным с SQL-инъекциями. Рекомендуется всегда использовать подготовленные выражения или экранировать входные данные, чтобы обеспечить безопасность вашего приложения.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь