2

FlourishLibを発見し、fDatabase.phpコードを調べて、SQLクエリをどのように処理するかを確認しました。また、MySQLを使用すると、準備されたクエリが無効になることに本当に驚きました。

$this->connection->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1);

599行目

なぜ彼らはこれをしたのですか?

私はPDO.prepareとPDOStatement.executeに慣れていますが、なぜこの選択​​をするのか疑問に思います。

4

1 に答える 1

1

非常に長い間、MySQLサーバー側のプリペアドステートメントは、理論上のパフォーマンスの打撃であり、煩わしさの原因でした。 2006年からのこのMySQLパフォーマンスブログの投稿は、ほとんどの理由を概説しています。クエリキャッシュと、プリペアドステートメントがそれをバイパスする方法、prepare-params-executeサイクルの追加のラウンドトリップ、およびプレースホルダー値として使用できるものと使用できないもののより厳密な標準に注意を払う必要があります。

MySQL 5.1.17以降、すべてではありませんが一部のプリペアドステートメントでクエリキャッシュを使用できるようになりました。他のマイナーな懸念はまだ存在しています。

PDOがプリペアドステートメントを実行する方法には2つのコントロールがあることを知っておく価値があります。もう1つはと呼ばれPDO::ATTR_EMULATE_PREPARESます。参照:今年の初めからのこのかなり重複していない質問

于 2012-11-05T20:28:54.623 に答える