Mysql
 sql >> база данни >  >> RDS >> Mysql

Запазители с множество имена на PDO не извличат данни

bindParam Изисква препратка

Проблемът е причинен от начина, по който свързвате параметри в цикъла foreach.

foreach($bindings as $placeholder=>$bound){
    echo $placeholder . " - " . $bound."<br/>";
    $stmt->bindParam($placeholder, $bound);
}

bindParam изисква справка. Той свързва променливата, а не стойността, с израза. Тъй като променливата в цикъл foreach се нулира в началото на всяка итерация, само последната препратка към $bound е оставен непокътнат и в крайна сметка обвързвате всичките си заместители към него.

Ето защо кодът ви работи, когато $query['where'] съдържа само един запис, но не работи, когато съдържа повече от един.

Можете да решите проблема по 2 начина:

Предаване по препратка

foreach($bindings as $placeholder => &$bound) {  //pass $bound as a reference (&)
    $stmt->bindParam($placeholder, $bound);     // bind the variable to the statement
}

Преминаване по стойност

Използвайте bindValue вместо bindParam :

foreach($bindings as $placeholder => $bound) {  
    $stmt->bindValue($placeholder, $bound);     // bind the value to the statement
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Разбиране на основните присъединявания

  2. Получавайте WP публикации на базата на множество двойки мета ключ/стойност, използвайки IN

  3. Как да получите годината от колона Datetime в MySQL

  4. Таблицата не може да бъде създадена в mysql - Грешка 1064

  5. Как да получите най-новия запис във всяка група с помощта на GROUP BY?