テキストを参考にしながら、PDOでデータベース(MySQL)に接続するプログラムを作っておりますが、
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, bool ) とは一体何のために設定しているんだろう?と疑問に思い、調べてみました。
自分の中では以下のような解釈となりましたが、いまいちピンと来ないのと、解釈が間違っているかもしれないと思い、こちらで質問させて頂きます。
何の為の設定か:
プリペアドステートメント機能のエミュレーションをPDO側でやるかどうかを設定する
trueだとPDO側でプリペアドステートメントが使える
falseだとデータベース側のプリペアドステートメントを使う
PDO側でプリペアドステートメントが使えると、プリペアドステートメントをPDO側でやるので、prepareする際にデータベースと通信する必要がないのでパフォーマンスが上がる。
ただ、prepareした時点ではエラーが出るかどうかわからない。(executeして初めてエラーがわかる)
また、複数のSQL文を1つのクエリで実行できる。
参考にしているテキストには、「プリペアドステートメントを使う際のセキュリティを高めるために設定している」とありましたが、正直よくわかっておりません。
いろんなサイトのコードを見ましたが、PDOでデータベースに接続する時は大抵はfalseに設定しているのをよく見ました。
これはprepareした時点でエラーが出るからfalseに設定しているものでしょうか?
自分が作成しているプログラムもfalseにしておりますが、意味がよくわかっていないのに使い続けるのは良くないと思うので、この時点ではっきりさせたく思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。