2011-01-17 11 views

Respuesta

8

Usted mencionó dos parámetros (con el mismo nombre) para preparar la declaración, sin embargo, proporciona un valor de sólo el primer parámetro (eso es lo que fue el error acerca).

No estoy muy seguro de cómo PDO resolvió internamente el problema con el mismo nombre de parámetro, pero siempre puedes evitarlo.

dos soluciones posibles:

$sql = "select * from $table ". 
     "where " 
     "first_name like concat('%', :fname, '%') or ". 
     "last_name like concat('%', :lname, '%')"; 
$stmt= $DBH->prepare($sql); 
$stmt->bindValue(':fname', $string, PDO::PARAM_STR); 
$stmt->bindValue(':lname', $string, PDO::PARAM_STR); 

$sql = "select * from $table ". 
     "where " 
     "first_name like concat('%', ?, '%') or ". 
     "last_name like concat('%', ?, '%')"; 
$stmt= $DBH->prepare($sql); 
$stmt->bindValue(1, $string, PDO::PARAM_STR); 
$stmt->bindValue(2, $string, PDO::PARAM_STR); 

Por cierto, el camino existente que ha hecho todavía tiene problemas de inyección SQL.

+0

Thx ajreal, ¿por qué mi camino sigue siendo sensible a las inyecciones? – bart

+0

porque incluyó todo en el sql completo, mientras que debe vincular el valor exacto para buscar solo, como en el ejemplo – ajreal

+0

@ajreal: simplemente una pequeña cosa: le falta un. (punto) entre '" donde "' y '" primer nombre ... "' – Helmut

Cuestiones relacionadas