PDO: «Неверный номер параметра» при замене нескольких параметров одинаковым значением - PullRequest
8 голосов
/ 17 января 2011

Как связать мой параметр, если он появляется несколько раз в запросе, как показано ниже?

$STH = $DBH->prepare("SELECT * FROM $table WHERE firstname LIKE :string OR lastname LIKE :string");

$STH->bindValue(':string', '%'.$string.'%', PDO::PARAM_STR);
$result = $STH->execute();

1 Ответ

8 голосов
/ 17 января 2011

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

Не совсем уверен, как 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...