sql >> Database teknologi >  >> RDS >> Mysql

PDO flere navngivne pladsholdere henter ikke data

bindParam Kræver en reference

Problemet er forårsaget af den måde, du binder parametre i foreach loop.

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

bindParam kræver en reference. Det binder variablen, ikke værdien, til udsagnet. Da variablen i en foreach loop nulstilles ved starten af ​​hver iteration, er det kun den sidste reference til $bound efterlades intakt, og du ender med at binde alle dine pladsholdere til det.

Det er derfor din kode virker, når $query['where'] indeholder kun én post, men mislykkes, når den indeholder mere end én.

Du kan løse problemet på 2 måder:

Bestå ved reference

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

Forbigå værdi

Brug bindValue i stedet for bindParam :

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



  1. Sådan falder du bordet i oracle

  2. SQL CREATE TABLE Syntaks – Listet efter DBMS

  3. PHP PDO bindParam() og MySQL BIT

  4. Returner dag, måned og år i MySQL