sql >> Database >  >> RDS >> Mysql

PDO meerdere benoemde tijdelijke aanduidingen halen geen gegevens op

bindParam Vereist een referentie

Het probleem wordt veroorzaakt door de manier waarop je parameters bindt in de foreach-lus.

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

bindParam een verwijzing nodig. Het bindt de variabele, niet de waarde, aan de instructie. Aangezien de variabele in een foreach-lus aan het begin van elke iteratie opnieuw wordt ingesteld, is alleen de laatste verwijzing naar $bound wordt intact gelaten en u bindt er uiteindelijk al uw tijdelijke aanduidingen aan.

Daarom werkt je code wanneer $query['where'] bevat slechts één invoer, maar mislukt wanneer deze meer dan één bevat.

U kunt het probleem op 2 manieren oplossen:

Gegevens op referentie

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

Waarde doorgeven

Gebruik bindValue in plaats van bindParam :

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



  1. MySQL:transacties over meerdere threads

  2. MAX() vs GREATEST() in MySQL:wat is het verschil?

  3. Verschil in het omgaan met de spaties tussen Oracle en SQL Server

  4. Mysql-wachtwoord wijzigen in Docker-container