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

PDOPHPは連想配列からDBに挿入します

    前回チェックしたとき、影響を受ける列が準備時に不明であるステートメントを準備することはできませんでしたが、それは機能しているようです。おそらく、データベースシステムは私が使用しているものよりも寛容です(主にpostgres)

    明らかに間違っているのは、implode()ステートメントです。各変数はそれ自体で処理する必要があるため、insertステートメントのフィールドリストを括弧で囲む必要もあります。

    ユーザー定義のフィールドを挿入するには、次のようなことをする必要があると思います(少なくとも私が行う方法)。

    $fields=array_keys($a); // here you have to trust your field names! 
    $values=array_values($a);
    $fieldlist=implode(',',$fields); 
    $qs=str_repeat("?,",count($fields)-1);
    $sql="insert into user($fieldlist) values(${qs}?)";
    $q=$DBH->prepare($sql);
    $q->execute($values);
    

    $ aのフィールド名を信頼できない場合は、次のようなことを行う必要があります

    foreach($a as $f=>$v){
       if(validfield($f)){
          $fields[]=$f;
          $values[]=$v;
       }
    }
    

    ここで、validfieldsは、各フィールド名をテストし、それが有効かどうかをチェックする、作成した関数です(連想配列$ valfields =array('name' => 1、'email' => 1、'phone' =>1...次に$valf​​ields[$ f]の値をチェックするか、(私が好むように)サーバーからフィールド名をフェッチして)



    1. 参加の排除:SQLServerが不要なテーブルを削除する場合

    2. oracleで分析関数を使用する方法(キーワードによるパーティションオーバー)

    3. 生年月日に基づいて年齢を計算します

    4. 表または列のタイトルにSQLキーワードを使用する