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

I segnaposto con più nomi PDO non recuperano i dati

bindParam Richiede un riferimento

Il problema è causato dal modo in cui leghi i parametri nel ciclo foreach.

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

bindParam richiede un riferimento. Associa la variabile, non il valore, all'istruzione. Poiché la variabile in un ciclo foreach viene reimpostata all'inizio di ogni iterazione, solo l'ultimo riferimento a $bound viene lasciato intatto e finisci per legare tutti i tuoi segnaposto ad esso.

Ecco perché il tuo codice funziona quando $query['where'] contiene solo una voce, ma non riesce quando ne contiene più di una.

Puoi risolvere il problema in 2 modi:

Passa per riferimento

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

Passa per valore

Usa bindValue invece di bindParam :

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