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

入力値がnullでない場合は列を更新し、そうでない場合は列の既存の値を無視してデータベースに保持します

    エスケープしたり引用符を付けたりせずに、ユーザー名をSQLに直接挿入しています。アポストロフィを見逃しただけだと思います。

    SQLインジェクションの問題を防ぐために、動的データからSQL文字列定数を挿入しないでください。常に、PreparedStatementを使用してマーカーを挿入してください。

    または、値をエスケープしますが、マーカーを使用する方がはるかに安全であり、データベースがコンパイル済みのSQLステートメントをキャッシュできるようにすることでSQLのパフォーマンスが向上します。

    String updateQuery = "UPDATE " + USER_TABLE +
                           " SET " + USER_TABLE_FIRST_NAME + "=IFNULL(? ," + USER_TABLE_FIRST_NAME + ")," +
                                     USER_TABLE_LAST_NAME + "=?," +
                                     USER_TABLE_ABOUT_ME + "=?," +
                                     USER_TABLE_CITY + "=?," +
                                     USER_TABLE_DOB + "=?" +
                         " WHERE " + USER_TABLE_ID + "=?";
    PreparedStatement stmt = conn.prepareStatement(updateQuery);
    stmt.setString(1, user.getFirstName());
    stmt.setString(2, user.getLastName());
    stmt.setString(3, user.getAboutMe());
    stmt.setString(4, user.getCity());
    stmt.setString(5, user.getDateOfBirth());
    stmt.setString(6, user.getUserId());
    

    注: ヌルチェックの問題をカバーするために回答が拡張されました。

    単純な文字列インジェクションを使用している場合、"A='" + name + "'" A='Joe'になります null以外の値の場合、A='null' null値の場合、これは間違いなくあなたが望むものではありません。

    パラメータマーカーを使用することにより、?の値 nullにすることができます 、つまりIFNULL(?, Name) 必要な正確な動作を提供します。つまり、?の値を使用します。 nullでない場合、およびNAMEの値 ?のとき nullです。



    1. PHPテーブル作成エラー1064

    2. JDBCとMySQLで行を追加する際に問題がありますか?

    3. PHP Laravel:ターゲットマシンが積極的に拒否したため、接続できませんでした

    4. ROWLOCK、UPDLOCK、READPASTクエリヒントに相当するOracle