funcion - php bindparam pdo
ConfusiĆ³n entre bindValue() y bindParam()? (2)
Estoy confundido entre estas dos funciones Bindvalue()
y BindParam()
- Leí en php.net que no escapó
%
y_
, así que tenga cuidado cuando useLIKE
. Así que creo queBindValue()
no se usa cuando estamos usando la consulta LIKE. - cuando utilizamos la consulta
LIKE
BindParam()
. Porque como sé que BindParam puede escapar de estos%
y_
. -
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.