• ベストアンサー

プリペアド・ステートメントの使い道

PHPとMySQLを独学で勉強して、1ヶ月ちょっとになります。 本には、「MySQLへの処理は、プリペアドステートメントで書くとよい」とありました。 メリットとしては、 (1)実行時のパフォーマンスがあがる(ネットによると若干あがる程度?) (2)自動でクォートの処理が行われるためSQLインジェクション対策になる とありました。 メリットがあるようなので、今のところ、すべてのMySQLへの処理について、 MDB2や、MDB2のExtendedを用いて、prepare、execute、getAllなどでphpを書いています。 しかし、毎回プリペアドして、実行しているため、phpが煩雑になっているように思います。 そのため、全てプリペアドで書いている自分のやり方がよいのか、 疑問に思えてきました。 またプリペアドのメリットは(2)が大きいようなので、 テキストボックスなどのinputされた内容を処理するSQL文のみ、 プリペアドで書けばいいのかな? と思うようになりました。 実際のところは、 (1)MySQLへの処理は、なるべく全てプリペアードした方がよいのでしょうか? (2)ある条件のときだけ、プリペアドすればよいのでしょうか? ぜひ、ご意見うかがわせていただきたいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

個人でちまちまやっている間はどんなやり方をしてもOK。 プリペアドという仕組みが用意されているのだから、便利だと思うなら 使うべきだし、不便を感じたら別の仕組みを模索してもよいかと。 これが、プロジェクトでうごいているのであれば、データの引渡しに 一定のルール決めが必要になるでしょうから、自然とプリペアドに 近い形になるでしょう。 また、プリペアドしたからといってユーザーから送られてくるデータが 保証されるわけではないので、きちんとバリデート処理はいれる 必要があります。

korota-xp
質問者

お礼

本に書いてあるとおりにしようとしすぎて 迷走していたもので、そう教えていただけると助かります。 とりあえず、個人でやっている段階なので、 適宜使いやすい方法でしていこうと思います。 内容のチェックは、本に従いながらやっていましたが、 あれはバリデート処理というんですね、ふむふむ。 いつもありがとうございます^^

その他の回答 (1)

  • dalianse
  • ベストアンサー率35% (7/20)
回答No.2

よほど大きな理由があれば使う、使わないを分けてもいいかもしれませんが、できれば1つの方法に統一しといた方がよいと思います。 ちなみに以下のように書けばそれほど煩雑でもないと思います。 $SQL = "select id from tbl"; $stmt = $pdo->prepare($SQL); $stmt->execute();

korota-xp
質問者

お礼

確かに、それだと手間がかからなさそうに思えます。 今までは、本の通りに $sql = 'SELECT id FROM tbl WHERE sex = ?'; $type = array('text'); $data = array('男'); $stmt = $mdb2->prepare($sql, $type); $stmt->execute($data); のように書いていました。 もう少し省略したり、まとめたりして、使いやすいようにする必要があるなと思いました。 PDOクラスを用いる方法も知りました。 ありがとうございます!

関連するQ&A