2009-08-23 5 views
6

¿Cuál es la diferencia entre las comillas "y"? ¿Qué pasa con '? ¿Hay algún error al usar diferentes comillas' y "debajo?PHP: ¿comillas diferentes?

$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) 
     ) 

Respuesta

18

La sustitución de variables no se realiza al usar comillas simples ('), significando que los valores en su primer ejemplo serían literalmente $ 1 $ 2, etc. si era una cadena regular y no se pasa a una función que los reemplaza.

Si no necesita una sustitución variable, es mejor quedarse con las comillas simples por motivos de rendimiento.

`` invoca el motor de shell y lo invoca como un comando real, y devuelve el resultado, al igual que en perl. Por lo tanto, tiene un significado completamente diferente.

ejemplos:

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

$ SQL1 serían user_id SELECT FROM usuarios WHERE email = [email protected]

$ sql2 sería user_id SELECT FROM usuarios WHERE email = $ email

+5

Escapes para controlar los caracteres, como \ n y \ t no se expanden en cadenas de comillas simples, también. – PhiLho

+1

Las cadenas como '$ sql1' siempre me hacen temblar. Si realmente quieres incluir una variable en él, usar '{$ email}' siempre obtiene mi preferencia. Mi enfoque habitual es '' WHERE email = ". $ Email', lo que deja absolutamente en claro que NO se debe tomar literalmente. – JorenB

+0

Por supuesto, ninguna de esas formas es segura contra la inyección de SQL, ¡como quiera que llame la variable! El OP tiene razón, usando $ 1 y otros para pg_query_params en comillas simples; no hay sustitución de variables en realidad está ocurriendo aquí. La sintaxis '$ 1' es tal vez un poco engañosa ... otros sistemas de parametrización de consultas simplemente usan '?'. – bobince

2

La diferencia entre las cadenas individuales y dobles citados está bien explicado en el PHP manual about Strings.

En su ejemplo, dado que está utilizando variables de sustitución como $1 que significa algo específico para pg_query_params y que lo hace no quieren PHP interpretar como nombres de variables, se debe utilizar comillas simples para sus cadenas de consulta SQL.

2

Básicamente, " permite incorporar variables de este modo:

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

(Desde el php manual)

Usando ' significa que ningún tipo de verificación para las variables se realiza.

<?php 
echo '$beer'; 
?> 

Salir $beer.

Cuestiones relacionadas