2011-03-20 19 views
12

¿Cuál es la diferencia entre las siguientes 2 consultas?¿Cómo afecta {} una consulta MySQL en PHP?

mysql_query("UPDATE table SET name = '$name'"); 

mysql_query("UPDATE table SET name = '{$name}'"); 
+1

Todavía tengo que encontrar la sintaxis SQL que usa llaves. –

+4

El código de ejemplo puede ser vulnerable a [SQL injection] (http://unixwiz.net/techtips/sql-injection.html), que es un [riesgo de seguridad] muy serio (http://bobby-tables.com/) Para solucionar este problema, cambie del controlador obsoleto mysql a [PDO] (http://php.net/PDO) y use [declaraciones preparadas] (http://www.php.net/PDO.prepared-statements). Si necesita un tutorial de PDO, intente ["Escribir secuencias de comandos de MySQL con PHP y PDO"] (http://www.kitebird.com/articles/php-pdo.html). El sitio que guardas puede ser tuyo. – outis

+0

Las llaves son una cosa de PHP, no de MySQL, FYI –

Respuesta

18

EN el lado SQL, no hay absolutamente ninguna diferencia: las dos consultas son exactamente las mismas.
(se puede comprobar que por el eco de todas ellas)

{$variable} es una sintaxis más completa de $variable, que permite usar:

  • "this is some {$variable}s"
  • "{$object->data}"
  • "{$array['data']}"
  • "{$array['data']->obj->plop['test']}"


Para más información, lea la sección del manual Variable parsing/Complex (curly) syntax(citar unos pocos bits):

Esto no se llama complejo porque la sintaxis es compleja, sino porque permite el uso de expresiones complejas .

Cualquier variable escalar, elemento de matriz o propiedad objeto con una representación de cadena pueden incluirse a través de esta sintaxis.
Simplemente escriba la expresión de la misma forma en que aparecería fuera de la cadena, y luego envuélvala en { y }.

+0

¡Buena respuesta completa! – Treffynnon

7

Las llaves "escapan" la variable de PHP y no se pasan a MySQL. Con una variable simple como $name no hace la diferencia, pero con algo como $user['name'] lo hace. Entonces, no hay nada diferente entre las dos consultas que ha publicado en su pregunta.

2

Esta consulta se puede utilizar si desea pasar una sola variable:

mysql_query("UPDATE table SET name = '$name'"); 

Esto puede ser usado si estás pasando un valor de índice en particular de una matriz.

mysql_query("UPDATE table SET name = '{$1}'",$name); 

Por cierto, sus dos consultas también fueron correctas en cuanto a sus posibilidades.

+0

Tenga en cuenta que puede [formatear líneas como código] (http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks) al sangrarlas cuatro espacios. El botón "{}" en la barra de herramientas del editor hace esto por usted. Edita tu respuesta y pruébala. Haga clic en el signo de interrogación naranja en la barra de herramientas del editor para obtener más información y sugerencias sobre el formateo. – outis

Cuestiones relacionadas