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

Mysql/PDO整合性違反の重複プライマリ-テーブルにはまだ何もありませんが

    これを解決してよかったです。ただし、これは理由に対処するためのものです。 なぜbindParam() あなたのために働いていませんでした。これはバグではなく、設計上このように機能します。

    ドキュメント による :

    (強調鉱山)

    上記を考慮すると、これは次のとおりです。

     87                         foreach($rowdata as $rowname => $rowvalue)
     88                         {
     89                                 $stmt->bindParam(':'.$rowname, $rowvalue);
     90                         }
    

    ...すべてのパラメータを$rowvalueにバインドします 参照 これは、クエリ実行時に常に1になります ($rowdataの最後の要素 )

    bindParam()を使用して機能させる方法 次のようになります:

     87                         foreach($rowdata as $rowname => $rowvalue)
     88                         {
     89                                 $stmt->bindParam(':'.$rowname, $rowdata[$rowname]);
     90                         }
    

    ...または、多分、さらに:

     87                         foreach($rowdata as $rowname => &$rowvalue)
     88                         {
     89                                 $stmt->bindParam(':'.$rowname, $rowvalue);
     90                         }
    

    ...各パラメータが対応する配列要素を参照するようにします 。

    上で引用したように、別の方法はbindValue()です。 パラメータを値でバインドします 参照ではなく。パラメータがbindValue()の時点で評価されることを意味します が呼び出され、実際に必要なとき(つまり、クエリの実行)ではありません:

     87                         foreach($rowdata as $rowname => $rowvalue)
     88                         {
     89                                 $stmt->bindValue(':'.$rowname, $rowvalue);
     90                         }
    

    もちろん、他の選択肢はexecute()にフィードすることです execute()を可能にするパラメータの配列を使用します バインディング部分を解決します(したがって、私の個人的なお気に入りです!)



    1. pymysqlを使用してストアドプロシージャを介してpyodbcmssqlクエリから返されたリストをmysqlに挿入するにはどうすればよいですか?

    2. 複数の行を返すサブクエリ

    3. mysqlでは2つの等しい値の減算はゼロではありません

    4. PostgreSQL9.2.1でトリガー呼び出しのループを回避する方法