2009-08-23 2 views
6

В чем разница между кавычками «и»? Что относительно `? Есть ли ошибка в использовании разных кавычек 'и' ниже?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) 
     ) 

ответ

18

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

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

`` вызывает shell-engine и вызывает его как действительную команду и возвращает результат, как и в perl. Следовательно, это имеет совершенно другой смысл.

примеров:

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

$ SQL1 было бы ВЫБРАТЬ user_id из пользователей, где электронная почта = [email protected]

$ SQL2 бы ВЫБРАТЬ user_id из пользователей, где электронная почта = $ электронной почты

+5

Escapes для управления символами, например \ n и \ t, также не разворачиваются в строках одиночной кавычки. – PhiLho

+1

Струны типа '$ sql1' всегда заставляют меня съеживаться. Если вы _really_ хотите включить в него переменную, всегда используйте мои '' {$ email} '. Мой обычный подход: '' WHERE email = ". $ Email', в котором совершенно ясно, что его НЕ следует воспринимать буквально. – JorenB

+0

Конечно, ни один из этих способов не защищен от SQL-инъекций, независимо от того, что вы называете переменной! OP имеет это право, используя $ 1 и др. Для pg_query_params в одинарных кавычках; здесь не происходит никакой замены переменных. Синтаксис '$ 1', возможно, немного вводит в заблуждение ... другие системы параметризации запроса используют '?'. – bobince

2

Разница между одиночными и двойными кавычками хорошо объясняется в PHP manual about Strings.

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

2

В принципе, " позволяет вставлять переменные так:

<?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 manual)

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

<?php 
echo '$beer'; 
?> 

Будет выдано $beer.