14

PDO への参照を、PDO 自体ではなく、PDO オブジェクトと等しくする --

との両方があることがわかります。リンクされたページでは、ステートメントのみに使用され、ステートメントに使用されているように見えます。現在、私は PDO を初めて使用するので、それを使用するという点で何が起こっているのかまだわかりません。そのため、なぜ異なる方法を使用するのか、なぜ異なる方法があるのか​​について説明していただければ幸いです。PDO->query()PDO->exec()PDO->query();SELECTPDO->exec()UPDATEINSERTDELETE

4

3 に答える 3

18

理論的な違いはあれど、これらの関数はいずれも使用すべきではありません。つまり、心配する必要はありません。

PDO を使用する唯一の理由は、準備済みステートメントのサポートですが、これらの関数のいずれもそれを提供していません。したがって、それらは使用しないでください。

prepare()/execute()代わりに、特にUPDATE、INSERT、DELETE ステートメントで使用してください。

準備された声明はセキュリティ対策として広く宣伝されていますが、人々の注意を引くためだけのものであることに注意してください. しかし、それらの本当の目的は、適切なクエリの書式設定です。これにより、セキュリティも確保されます-適切にフォーマットされたクエリも注入できないため-副作用と同じです。しかし、繰り返しますが、書式設定は主な目標です。適切に書式設定されていないと、無害なデータでもクエリ エラーが発生する可能性があるからです。

編集:またはexecute()のみを返すことに注意してください操作の成功を示します。の影響を受けるレコード数などのその他の情報については、 などのメソッドが提供されています。ドキュメントを参照してください。TRUEFALSEUPDATErowCount()

于 2013-05-05T04:59:30.950 に答える
15

PDO の公式ドキュメントを見てください:

  • PDO::exec()- 「SQL ステートメントを実行し、影響を受けた行の数を返す」
  • PDO::query()- 「SQL ステートメントを実行し、結果セットを PDOStatement オブジェクトとして返します」

どちらの関数もクエリを実行しますが、exec()影響を受けた行数のみを返します。これは、有用なUPDATEものが何も返されず、適切な数の行が変更されたかどうかを知るためにのみ役立つクエリに役立ちます。

于 2013-05-05T04:23:07.660 に答える