sql >> Base de Datos >  >> RDS >> Mysql

PDO múltiples marcadores de posición con nombre no recupera datos

bindParam Requiere una referencia

El problema se debe a la forma en que enlazas los parámetros en el ciclo foreach.

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

bindParam requiere una referencia. Vincula la variable, no el valor, a la declaración. Dado que la variable en un bucle foreach se restablece al comienzo de cada iteración, solo la última referencia a $bound se deja intacto, y termina vinculando todos sus marcadores de posición a él.

Es por eso que su código funciona cuando $query['where'] contiene solo una entrada, pero falla cuando contiene más de una.

Puedes resolver el problema de 2 maneras:

Pasar por referencia

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

Pasar por valor

Usa bindValue en lugar de bindParam :

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