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

空のフィールドを無視して1つ以上のフィールドをmysqlデータベースに更新する方法は?

    まず、POST、GET、またはREQUESTを介して届く文字列をエスケープすることを忘れないでください(理由がわからない場合は、SQLインジェクション攻撃について調べてください)。

    このようなものが機能する可能性があります:

    $semaphore = false;
    $query = "UPDATE contacts SET ";
    $fields = array('tel','fax','email');
    foreach ($fields as $field) {
       if (isset($_POST[$field]) and !empty($_POST[$field]) {
         $var = mysql_real_escape_string($_POST[$field]);
         $query .= uppercase($field) . " = '$var'";
         $semaphore = true;
       }
    }
    
    if ($semaphore) {
       $query .= " WHERE Cust_Name = '$cst'";
       mysql_query($query);
    }
    

    NB :SQLステートメントを作成するために$_POST配列を単純にループしないでください。対戦相手はPOSTフィールドを追加し、いたずらを引き起こす可能性があります。ユーザー入力配列をループすると、インジェクションベクトルが発生する可能性もあります。フィールド名をステートメントに追加する必要があります。つまり、フィールド名は潜在的なベクトルです。標準のインジェクション防止手法(プリペアドステートメントパラメーター、ドライバー提供の引用関数)は、識別子では機能しません。代わりに、フィールドのホワイトリストを使用して設定し、ホワイトリストをループするか、入力配列をホワイトリストに渡します。



    1. ダウンロード用の安全なファイル

    2. 複数の列の集計を含むSQLServerピボットテーブル

    3. 2011年春のPostgreSQLカンファレンス、米国/カナダ

    4. LaravelhasManyおよびbelongsToパラメーター