PHP: разные кавычки?

В чем разница между кавычками "и"? А как насчет "? Есть ли ошибка в использовании разных кавычек" и" ниже?

 $result = pg_query_params($dbconn,
      'INSERT INTO users 
      (username, email, passhash_md5)
      VALUES ($1, $2, $3)',
          array($username, $email, $passhash_md5
      )


      $result = pg_query_params( $dbconn,
          "SELECT user_id
           FROM users
          WHERE email = $1",
          array( $email )
          )

person Léo Léopold Hertz 준영    schedule 23.08.2009    source источник


Ответы (3)


Подстановка переменных не выполняется при использовании одинарных кавычек ('), что означает, что значения в вашем первом примере были бы буквально $1 $2 и т. д., если бы это была обычная строка, а не переданная функции, которая их заменяет.

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

`` вызывает движок оболочки и вызывает его как реальную команду и возвращает результат, как в perl. Отсюда и совсем другое значение.

Примеры:

$email = '[email protected]';
$sql1 = "SELECT user_id FROM users WHERE email = $email";
$sql2 = 'SELECT user_id FROM users WHERE email = $email';

$sql1 будет SELECT user_id FROM users WHERE email = [email protected]

$sql2 будет SELECT user_id FROM users WHERE email = $email

person jishi    schedule 23.08.2009
comment
Экранирование для управления символами, такими как \n и \t, также не раскрывается в строках с одинарными кавычками. - person PhiLho; 23.08.2009
comment
Строки типа $sql1 всегда заставляют меня съеживаться. Если вы действительно хотите включить в него переменную, я всегда предпочитаю использовать {$email}. Мой обычный подход: "WHERE email = ".$email, который абсолютно ясно дает понять, что это НЕ следует понимать буквально. - person JorenB; 23.08.2009
comment
Конечно, ни один из этих способов не застрахован от SQL-инъекций, как бы вы ни называли переменную! ОП прав, используя $1 и др. для pg_query_params в одинарных кавычках; на самом деле здесь не происходит подстановки переменных. Синтаксис «$1», возможно, немного вводит в заблуждение... другие системы параметризации запросов просто используют «?». - person bobince; 23.08.2009
comment
PHP токенизирует вводимый текст с помощью конечного автомата (вот так), поэтому нет абсолютно никакой разницы в производительности между одинарными и двойными кавычками, если вы не используете переменную интерполяцию. Кроме того, нехорошо показывать пример кода, в котором есть серьезные дыры в безопасности. - person Kornel; 20.12.2011

По сути, " позволяет вставлять переменные следующим образом:

<?php
$beer = 'Heineken';
echo "$beer's taste is great"; // works; "'" is an invalid character for variable names
echo "He drank some $beers";   // won't work; 's' is a valid character for variable names but the variable is "$beer"
echo "He drank some ${beer}s"; // works
echo "He drank some {$beer}s"; // works
?>

(Из руководства по php)

Использование ' означает, что проверка переменных не выполняется.

<?php
echo '$beer';
?>

Выведет $beer.

person Rich Bradshaw    schedule 23.08.2009

Разница между строками в одинарных и двойных кавычках подробно описана в Руководстве по PHP о строках.

В вашем примере, поскольку вы используете переменные подстановки, такие как $1, которые означают что-то конкретное для pg_query_params и которые вы не хотите, чтобы PHP интерпретировал их как имена переменных, вы должны использовать одинарные кавычки для строк SQL-запроса.

person Greg Hewgill    schedule 23.08.2009