電子書籍の厳選無料作品が豊富!

query、prepare、executeはどう使い分ければいいですか?
「query」は簡易版で使うメソッドであり、「prepare」と「execute」は詳細版で使うメソッド
で大体合っていますか?

質問者からの補足コメント

  • どう思う?

    回答ありがとうございます。executeメソッドを引数なしで使う場合と、
    引数として配列を入れる場合の違いは何ですか?

      補足日時:2021/04/15 18:32
  • どう思う?

    回答ありがとうございます。execute()メソッドの引数として配列を入れるのはプレースホルダに値をバインドする場合(SQL文に?を使う)ということで合っていますか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/04/18 15:21

A 回答 (5件)

バインドする必要のあるパラメーターがない、


bindParam()やbindValue()によってパラメーターがバインドされている
時は、引数は用いません。

実行時点でパラメーターをバインドする時は、引数を用います。

リファレンスを読むクセをつけましょう。
https://www.php.net/manual/ja/pdostatement.execu …
    • good
    • 0

他の方の回答に、ユーザー入力が絡まない場合はqueryでいいかのような表現をされていますが、受け取り方では違います。



DBから見たユーザーとは、PHPになります。
つまり、PHPのロジックで、不定な値を利用してDB問い合わせをするときは、queryは好ましくありません。
つまり、DBから見たら、何も入力値はブラウザから来るとは限らないということです。
queryで構わないパターンは、完全に定まった文字列のクエリを発行する時だけです。

何らかの起因によってSQLインジェクションを及ぼす可能性があります。

よって、プレースホルダーがあろうがなかろうが、常にprepare、executeを利用しましょう。
不要なシーンもありえますが、楽しようとして悪いクセをつけてしまわないように。
    • good
    • 0

ユーザーが入力した値を使ってSQLを実行する場合は、prepareとexecuteを使ってプレースホルダーの機能で入力値をSQLに埋め込みます。



ユーザーが入力した値を使わないクエリーはqueryでいいです。

不正アクセスとかが無かった大昔に書かれた本だと、ユーザーが入力した値をプレースホルダーを使わずにSQLに埋め込んでいるサンプルが書かれてたりしますが、今そんなことをしたらあっという間に不正アクセスされてしまいます。
    • good
    • 0

queryはselect文等でよく使われるようです



prepareはinsert文など複数件のクエリを処理する場合にパフォーマンスが良いのだそうです

executeは
prepareでステートメント準備後にexecute(実行)するという事ですね

PHPのリファレンスを見ると以下の様にあります

---
PDO::query() は、一回の関数コールの中で SQL ステートメントを実行し、このステートメントにより返された 結果セット (ある場合) を PDOStatement オブジェクトとして返します。

複数回発行する必要があるステートメントの場合、 PDO::prepare() で PDOStatement ステートメントを準備し、 PDOStatement::execute() でそのステートメントを 複数回発行する方がより良いパフォーマンスを得られると実感するでしょう。

異なるパラメータを用いて複数回実行されるような文に対し PDO::prepare() と PDOStatement::execute() をコールすることで、 ドライバがクライアントまたはサーバー側にクエリプランやメタ情報を キャッシュさせるよう調整するため、 アプリケーションのパフォーマンスを最適化します。また、 パラメータに手動でクオートする必要がなくなるので SQL インジェクション攻撃から保護する助けになります。
---
https://www.php.net/manual/ja/pdo.query.php

以上、ご参考まで
この回答への補足あり
    • good
    • 0

prepare、executeは一体で実行するものです


queryはクライアントから受け取ったデータを引き継がないときに使います
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!