sql >> Databáze >  >> RDS >> Mysql

Více pojmenovaných zástupných symbolů PDO nenačte data

bindParam Vyžaduje referenci

Problém je způsoben způsobem, jakým vážete parametry ve smyčce foreach.

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

bindParam vyžaduje referenci. Sváže proměnnou, nikoli hodnotu, s příkazem. Protože proměnná ve smyčce foreach je resetována na začátku každé iterace, pouze poslední odkaz na $bound zůstane nedotčeno a nakonec k němu připojíte všechny své zástupné symboly.

To je důvod, proč váš kód funguje, když $query['where'] obsahuje pouze jeden záznam, ale selže, pokud obsahuje více než jeden.

Problém můžete vyřešit dvěma způsoby:

Přejít podle reference

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

Přejít podle hodnoty

Použijte bindValue místo bindParam :

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



  1. Jak vytvořit spouštěče pro přidání událostí změn do tabulek protokolu auditu

  2. SQLite - Aktualizace dat

  3. MariaDB FLOOR() vs. TRUNCATE()

  4. INSERT a SELECT v jediném dotazu MySQL