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

pg_escape_stringは正確に何をしますか?

    次のコードを検討してください:

    $sql = "INSERT INTO airports (name) VALUES ('$name')";
    

    ここで、$nameと仮定します。 "Chicago O'Hare"です 。文字列補間を行うと、次のSQLコードが得られます:

    INSERT INTO airports (name) VALUES ('Chicago O'Hare')
    

    アポストロフィが原因で、これは形式が正しくありません。 SQL引用符として解釈されます 、およびクエリはエラーになります。

    さらに悪いことが起こる可能性もあります。実際、SQLインジェクションは、MITREによって2011年の最も危険なソフトウェアエラーの第1位にランクされました。

    ただし、とにかく文字列補間を使用してSQLクエリを作成することはできません。代わりに、パラメータを使用したクエリを使用してください。

    $sql = 'INSERT INTO airports (name) VALUES ($1)';
    $result = pg_query_params($db, $sql, array("Chicago O'Hare"));
    


    1. MySQL:複数のテーブルまたは多くの列を持つ1つのテーブル?

    2. SQLServerでの延期可能な制約

    3. エラー1698(28000):ユーザー'root'@'localhost'のアクセスが拒否されました

    4. SQLServerドライバーを使用してPDO経由でSQLServerに接続する