Как связать мой параметр, если он появляется несколько раз в запросе следующим образом?
$STH = $DBH->prepare("SELECT * FROM $table WHERE firstname LIKE :string OR lastname LIKE :string"); $STH->bindValue(':string', '%'.$string.'%', PDO::PARAM_STR); $result = $STH->execute();
Вы упомянули два параметра (с тем же именем) для инструкции подготовки, но вы указали только значение для первого параметра (это была ошибка).
Не совсем уверен, как 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-инъекциями.