私はPDOライブラリの初心者です。私は自分のデータベースとしてmysqlを開発環境に取り組んでいます。 "?"を使用している間、準備と実行の機能を使用してクエリを実行することができます。プレースホルダと、名前付きプレースホルダ(例: ":column")を使用している間はbindParamメソッドも使用できます。この後PDOがSQLインジェクションをエスケープしていることは、どのようにわかりますか?
私は、PDOはmysql_real_escape_stringのが行うようクエリをサニタイズするために、任意の引用符を入れることにより、エスケープのいずれかの種類を行うかどうかを確認してみました。私はどのようなクエリの外観を見てしようとしているが、私が得るすべては、準備ステートメントに渡されたが、実行されるクエリではないステートメントです。
私は$ result-> execute()と$ result-> fetch()をvar_dumpしようとしましたが、execute文はplace holderを持つprepare文のsqlを返しますが、fetch文はそのクエリの結果を返します。
実行される検索クエリを表示する方法、またはクエリを実行する前にパラメータがどのように見えるのかがありますか?
私は私の質問ではっきりしていることを願っています。 :|
あなたは、あまり心配。準備文は入力を100%エスケープします。最終的なクエリーの内容を確認する必要がある場合は、データベースクエリーログを設定する必要があります。 – netcoder
@netcoderプリペアドステートメントは何もエスケープしません(互換モードでない限り)。クエリログには何も新しいものはありません。 –
@Col。 Shrapnel:技術的にはそうですが、あなたが望むように言葉で言えます。 「クエリログには何も新しいことはありません」という意味では、意味が分かりません。 – netcoder