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

クエリでREGEXを使用して準備されたSQLステートメントのセキュリティ

    プレースホルダーは引用できません。そのように簡単です:

    SELECT ... WHERE foo = ?
    SELECT ... WHERE foo = '?'
    

    最初のものはプレースホルダーであり、期待どおりに機能します。もう1つは、文字「疑問符」に対する同等性のテストです。もうプレースホルダーではありません。

    そして、の問題があります 正規表現のメタ文字でもあります。プレースホルダーを引用できる場合は、与えられます

    SELECT ... WHERE foo REGEXP '^.?' 
    

    その クエリのプレースホルダーになりますか、それとも正規表現の「ゼロまたは1」の範囲演算子ですか?

    正規表現でプレースホルダーを使用する場合は、正規表現パターンを「構築」する必要があります

    SELECT ... WHERE foo REGEXP concat('^.', ?)
    

    LIKEを作成する必要があるのとまったく同じ方法 パターン:

    SELECT ... WHERE foo LIKE '%?%' // wrong
    SELECT ... WHERE foo LIKE concat('%', ?, '%') // right
    



    1. MYSQL、一意のテーブル名を使用するVSIDを使用する

    2. トリガーを使用してSQLをインクリメントするにはどうすればよいですか?

    3. mysqliに切り替えるか、mysqlを使用し続けますか?

    4. Oracle-DBMS_MVIEW.REFRESHを使用して「REFRESHFORCEONDEMAND」ビューを更新するとどうなりますか