Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mehrere benannte PDO-Platzhalter rufen keine Daten ab

bindParam Benötigt eine Referenz

Das Problem wird durch die Art und Weise verursacht, wie Sie Parameter in der foreach-Schleife binden.

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

bindParam erfordert eine Referenz. Es bindet die Variable, nicht den Wert, an die Anweisung. Da die Variable in einer foreach-Schleife zu Beginn jeder Iteration zurückgesetzt wird, wird nur der letzte Verweis auf $bound bleibt intakt, und Sie binden am Ende alle Ihre Platzhalter daran.

Deshalb funktioniert Ihr Code, wenn $query['where'] enthält nur einen Eintrag, schlägt aber fehl, wenn es mehr als einen enthält.

Sie können das Problem auf 2 Arten lösen:

Als Referenz übergeben

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

Wertübergabe

Verwenden Sie bindValue statt bindParam :

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