update funcion example entre diferencia php pdo bindvalue bindparam

funcion - php bindparam pdo



ConfusiĆ³n entre bindValue() y bindParam()? (2)

Estoy confundido entre estas dos funciones Bindvalue() y BindParam()

  1. Leí en php.net que no escapó % y _ , así que tenga cuidado cuando use LIKE . Así que creo que BindValue() no se usa cuando estamos usando la consulta LIKE.
  2. cuando utilizamos la consulta LIKE BindParam() . Porque como sé que BindParam puede escapar de estos % y _ .
  3. BindValue() no brinda protección contra la inyección sql. No estoy seguro de esto, ¿es cierto?

amigos dicen lo que menciono en estos 3 puntos es correcto o incorrecto. Soy principiante en PDO, así que explícalo claramente.


Bueno, lo tomaste todo mal.

Bindvalue() y BindParam() son iguales en cualquier forma, excepto por el tipo de argumento.

  • Bindvalue () enlaza solo un valor, es como una copia impresa .
  • BindParam () vincula una variable, y cuando se cambia una variable, también se cambiará el valor encuadernado.

Ambos no escapan% y _, lo que no importa demasiado. Tal fuga solo afecta la confiabilidad de los resultados devueltos, sin importar las "inyecciones".


No debe haber diferencia en la forma en que los valores se escapan o no se escapan. bindParam difiere de bindValue en que hace referencia a la variable, vinculando el valor solo cuando se ejecuta la instrucción. bindValue toma el valor inmediatamente. Para ilustrar:

$stmt = $db->prepare(''SELECT * FROM `table` WHERE foo = :foo''); $foo = ''foo''; $stmt->bindValue('':foo'', $foo); $foo = ''bar''; $stmt->execute();

Lo anterior se ejecuta como SELECT * FROM table WHERE foo = ''foo'' ;

$stmt = $db->prepare(''SELECT * FROM `table` WHERE foo = :foo''); $foo = ''foo''; $stmt->bindParam('':foo'', $foo); $foo = ''bar''; $stmt->execute()

Lo anterior se ejecuta como SELECT * FROM table WHERE foo = ''bar'' .

Es cierto que a ninguno le importan _ o % como caracteres especiales, porque en general no son caracteres especiales en lo que se refiere a la sintaxis, y el controlador de la base de datos no puede analizar el contexto para determinar si usted quiere decir % ser un comodín o el carácter real "%" en el contexto de una consulta LIKE .

Ambos protegen contra la inyección de SQL.