sql >> Databasteknik >  >> RDS >> Mysql

PDO flera namngivna platshållare hämtar inte data

bindParam Kräver en referens

Problemet orsakas av hur du binder parametrar i foreach loop.

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

bindParam kräver en referens. Den binder variabeln, inte värdet, till påståendet. Eftersom variabeln i en foreach loop återställs i början av varje iteration, är endast den sista referensen till $bound lämnas intakt och det slutar med att du binder alla dina platshållare till det.

Det är därför din kod fungerar när $query['where'] innehåller bara en post, men misslyckas när den innehåller mer än en.

Du kan lösa problemet på två sätt:

Visa referens

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

Övergå värde

Använd bindValue istället för bindParam :

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



  1. Uppdatera eller infoga (flera rader och kolumner) från underfråga i PostgreSQL

  2. Fråga en parameter (postgresql.conf-inställning) som max_connections

  3. Hur man hittar MySQL temporär tabelllagringsmotor

  4. PHP MySQL Drop Down Box Fyll i valt värde