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

HTMLFORMから定義された変数に基づいてMYSQLUPDATEステートメントを動的に生成する方法

    テーブル内のすべてのフィールド名がフォーム入力の名前と同じであると仮定すると、これは簡単です。これを使用できます:

    $query = "UPDATE product SET";
    $comma = " ";
    foreach($_POST as $key => $val) {
        if( ! empty($val)) {
            $query .= $comma . $key . " = '" . mysql_real_escape_string(trim($val)) . "'";
            $comma = ", ";
        }
    }
    $sql = mysql_query($query);
    

    より安全にするには、受け入れられたパラメータのホワイトリストを作成する必要があります。つまり、次のようにテーブルの列を作成します。

    $query = "UPDATE product SET";
    $comma = " ";
    $whitelist = array(
        'title',
        'rating',
        'season',
        'brand_id',
        'cateogry',
        // ...etc
    );
    foreach($_POST as $key => $val) {
        if( ! empty($val) && in_array($key, $whitelist)) {
            $query .= $comma . $key . " = '" . mysql_real_escape_string(trim($val)) . "'";
            $comma = ", ";
        }
    }
    $sql = mysql_query($query);
    

    そうすれば、クエリには設定したパラメータのみを含めることができ、誰かが(たとえば、フォーム入力の名前を変更することによって)エクストラを挿入することができた場合、それはデータベースに渡されません。

    また、 MySQL _ *の使用を停止することをお勧めします 、非推奨 です 。 MySQLi をご覧ください。 または PDO 代替案として。




    1. MySQLSELECTから値を連結する方法

    2. DapperMySQLの戻り値

    3. Tanh()がPostgreSQLでどのように機能するか

    4. t-sqlで「execute」を使用して値を変数に設定するにはどうすればよいですか?