今日ご紹介したいのは、1.
条件: PHP magic_quotes_gpc=off
データベースに書き込まれる文字列は、いかなる方法でもフィルタリングされていません。データベースから読み取られた文字列は一切処理されません。
データ: $data="snow"''sun"; (snow と sun の間には 4 つの連続した一重引用符があります)
操作: 文字列「snow"''sun" をデータベースに書き込みます。
結果: SQL ステートメント エラーが発生しました。MySQL は SQL ステートメントを正常に完了できず、データベースへの書き込みに失敗しました。
データベース保存形式: データがありません。
出力データ形式: データなし。
注: 未処理の一重引用符は、データベースに書き込まれるときに SQL ステートメントでエラーを引き起こします。
2.
条件: PHP magic_quotes_gpc=off
データベースに書き込まれた文字列は、関数 addlashes() によって処理されます。データベースから読み取られた文字列は一切処理されません。
データ: $data="snow"''sun"; (snow と sun の間には 4 つの連続した一重引用符があります)
操作: 文字列「snow"''sun" をデータベースに書き込みます。
結果: SQLステートメントはスムーズに実行され、データはデータベースに正常に書き込まれました
データベースの保存形式:snow””sun(入力と同じ)
出力データの形式:snow””sun(入力と同じ)
手順: addlashes () 関数は、SQL ステートメントが正常に実行できるように単一引用符をエスケープ文字に変換します。ただし、データベースに保存されるのは雪ではなく雪です。 '''' 想像しました。 sun
条件: PHP magic_quotes_gpc=on
データベースに書き込まれた文字列は、いかなる方法でも処理されません。
データベース保存形式: Snow”''sun (入力と同じ)出力データ形式: Snow”''sun (入力と同じ)説明: PHP magic_quotes_gpc=on 一重引用符を ' エスケープ文字に変換します SQL ステートメントは正常に実行されましたが、データとしてデータベースに入力されませんでした。データベースには、私たちが想像していた雪''''太陽ではなく、雪''''太陽が保存されました。
4.
データベースに書き込まれた文字列は、関数 addlashes() によって処理されます。データベースから読み取られた文字列は一切処理されません。
データ: $data="snow"''sun"; (snow と sun の間には 4 つの連続した一重引用符があります)
操作: 文字列「snow"''sun" をデータベースに書き込みます。
結果: SQL ステートメントはスムーズに実行され、データはデータベースに正常に書き込まれました
データベース保存形式: Snow''''sun (エスケープ文字を追加)
出力データ形式: Snow''''sun (エスケープ文字を含む)追加) )
説明: PHP magic_quotes_gpc=on は、SQL ステートメントが正常に実行できるように、一重引用符を 'エスケープ文字に変換します。
addslashes は、データベースに書き込もうとしている一重引用符を ' に変換します。後者の変換は次のように記述されます。 dataデータベース、データベースはsnow''''sunを保存します
概要は次のとおりです:
文字列に対して
この時点で入力データに対してaddslashes()を実行する場合は、
2. PHP magic_quotes_gpc=off の場合
addslashes() を使用して入力データを処理する必要がありますが、addslashes() はバックスラッシュを書き込まないため、出力をフォーマットするためにstripslashes() を使用する必要はありません。これは、mysql が SQL ステートメントの実行を完了するのに役立つだけです。
補足:
magic_quotes_runtime スコープ: ファイルから読み取られたデータ、または exec() の実行結果、または SQL クエリから取得されたデータ; アクション時間: スクリプトが実行状態で生成されたデータにアクセスするたび