2011-01-17 9 views

risposta

8

Lei ha parlato di due parametri (con lo stesso nome) per l'istruzione di preparare, ma si fornisce un valore solo per il primo parametro (che è quello che l'errore era circa).

Non sono sicuro di come il PDO abbia risolto internamente lo stesso problema con il nome del parametro, ma è sempre possibile evitarlo.

due possibili soluzioni:

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

Tra l'altro, il modo in cui esistente che avete fatto ha ancora problemi di SQL injection.

+0

Thx ajreal, perché la mia via è ancora sensibile all'iniezione? – bart

+0

perché hai incluso tutto nello sql completo, mentre dovresti associare il valore esatto alla sola ricerca, come nell'esempio – ajreal

+0

@ajreal: solo una piccola cosa: manca a. (punto) tra "" dove "' e '" first_name ... "' – Helmut

Problemi correlati