2011-02-05 4 views
0

SQLのインジェクションを避けるために、どのようなパラメータ化されたクエリがPHPでMySQLデータベース用に実装されているのかを誰でも簡単に説明できますか?平易な英語で説明されているパラメータ化されたクエリは何ですか?

+1

[これは疑わしい重複であるという質問への回答](http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php)パラメータ化されたクエリが何であるかは説明しません。 – Gumbo

+0

あなたの質問のどの部分があなたにとって重要なのですか? – Gumbo

答えて

1

PHPマニュアルのprepared statements and stored proceduresセクションに、それはPDOに特異的に関連しながら、それが言うときもこれを取り上げます

を彼らは SQL用 コンパイルテンプレートの一種と考えることができますアプリケーションは実行するために、可変パラメータを使用して をカスタマイズすることができます。一度、クエリのみ解析する必要があります(または 準備)

  • が、同じまたは 異なるパラメータで 複数回実行することができます。 プリペアドステートメントは、2つの主要な の利点を提供します。クエリ が準備されると、データベースは クエリの実行計画を分析し、コンパイルし、最適化します。 複雑なクエリの場合、 は十分に時間がかかることがあります。 が同じクエリを多数繰り返す必要がある場合は、アプリケーションをスローダウンします。異なるパラメータで 回です。 によって、 アプリケーションは、 analyze/compile/optimizeサイクルの繰り返しを回避します。この は、準備されたステートメントがより少ないリソースを使用してより速く実行されることを意味します。

  • 準備文へのパラメータ は引用符で囲む必要はありません。ドライバ がこれを自動的に処理します。 アプリケーションが排他的に準備 ステートメントを使用している場合、開発者は何のSQLインジェクションが を発生しません は( クエリの他の部分は エスケープ入力して構築されている場合は、SQLインジェクションがまだ可能 である)ことを確認することができます。

あなたがそれらを使用する方法の具体的な例として後にしている場合は、上記のリンク先のページには、また、コードサンプルが含まれています。

関連する問題