質問: mysql_real_escape_stringよりもmysqlクエリ/クエリ文字列のエスケープにpdoが優れているのはなぜですか? mysqlのエスケープには、mysql_real_escape_stringよりもpdoを使用した方が良いと言われました。たぶん、私は脳死の日を過ごしています(または、それは自然なプログラマーの想像力のストレッチがなく、phpに関してはまだ初心者の段階にいるという事実かもしれません) phpマニュアルを読んで pdoのエントリ を読んで、pdoが実際に何であるか、そしてmysql_real_escape_stringを使用するよりも優れている理由についてはまだ明確ではありません。 oopの複雑さをまだ理解できていないからです(oopと関係があると思います)が、変数と配列の値がそれらの前にコロンがありますが、実際にそれが何であり、どのように使用するのかまだわかりません(そしてmysql_real_escape_stringよりも優れている理由も。(それは私が本当に明確ではないという事実と関係があるかもしれません「クラス」とは何かを理解しているので、「pdoクラス」を読んだとき、私は本当に賢い人ではありません)。mysql webサイトの 'developer zone'ビットで 記事 または2を読んだので、私はまだ明確ではありません。現時点でそれが何であるかさえ理解できないので、おそらくそれを使用することは今私を少し超えていると思いますが、私はまだ教育を広げて、物事を改善する方法を見つけることに興味があります。誰も私に「プレーン英語」でpdoが何であるかを説明することができますか(またはプレーン英語で書かれた主題に関する何かの方向を教えてください)、それをどのように使用しますか?
回答: mysql_real_escape_stringよりもmysqlクエリ/クエリ文字列のエスケープにpdoが優れているのはなぜですか? 「エスケープ」だけでは意味がないからです。 さらに、それは異なっています比較できない問題。エスケープの唯一の問題は、誰もが間違っている何らかの「保護」と想定していることです。 「クエリを保護しました」という意味で「変数をエスケープしました」とみんなが言います。 一方、単独でのエスケープは保護とはまったく関係ありません。データをエスケープして引用したの場合、大まかに保護を達成できますが、たとえば識別子(どこかでpdoと同様)には適用できません。したがって、答えは次のとおりです。 pdoは、バインドされた値のエスケープを行うときに、エスケープするだけでなく、引用も適用します。そのため、より良い方法です。 「エスケープ」は「保護」の同義語ではありません。 「エスケープ+クォート」は大体です。 ただし、一部のクエリパーツでは、両方のメソッドが適用できません。