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.
Thx ajreal, perché la mia via è ancora sensibile all'iniezione? – bart
perché hai incluso tutto nello sql completo, mentre dovresti associare il valore esatto alla sola ricerca, come nell'esempio – ajreal
@ajreal: solo una piccola cosa: manca a. (punto) tra "" dove "' e '" first_name ... "' – Helmut