PDO: «Недопустимый номер параметра» при подстановке нескольких параметров с одинаковым значением

Как связать мой параметр, если он появляется несколько раз в запросе следующим образом?

$STH = $DBH->prepare("SELECT * FROM $table WHERE firstname LIKE :string OR lastname LIKE :string"); $STH->bindValue(':string', '%'.$string.'%', PDO::PARAM_STR); $result = $STH->execute(); 

Solutions Collecting From Web of "PDO: «Недопустимый номер параметра» при подстановке нескольких параметров с одинаковым значением"

Вы упомянули два параметра (с тем же именем) для инструкции подготовки, но вы указали только значение для первого параметра (это была ошибка).

Не совсем уверен, как PDO внутренне решила проблему с одним и тем же параметром, но вы всегда можете избежать этого.

Два возможных решения:

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

Кстати, существующий способ, который вы сделали, все еще имеет проблемы с SQL-инъекциями.