sql >> データベース >  >> RDS >> Mysql

PDOの複数の名前付きプレースホルダーはデータを取得しません

    bindParamには参照が必要です

    この問題は、foreachループでパラメーターをバインドする方法が原因で発生します。

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

    bindParam 参照が必要です。値ではなく変数をステートメントにバインドします。 foreachループ内の変数は各反復の開始時にリセットされるため、$boundへの最後の参照のみ はそのまま残り、すべてのプレースホルダーをバインドすることになります。

    これが、$query['where']のときにコードが機能する理由です。 エントリは1つだけですが、複数含まれていると失敗します。

    この問題は2つの方法で解決できます:

    参照渡し

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

    値渡し

    bindValueを使用する bindParamの代わりに :

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



    1. WindowsにSQLServerをインストールする方法

    2. MySQL5.6は、サービスを開始しようとしているプロセスでスタックしました

    3. LinuxサーバーでMySQLテーブル名を大文字と小文字を区別しないように変更するにはどうすればよいですか?

    4. SQL Serverのデータベースで変更データキャプチャ(CDC)を有効にする方法-SQLServerチュートリアル