現在、準備されたステートメントをプライベート変数に保存しています。これは、準備されたステートメントが深層で実際にどのように機能するかを無視し、念のため実行するためです。
したがって、質問は非常に簡単です。同じ を反復処理すると$PDO->prepare()
、同じクエリが再び準備されますか?
foreach( $arr as $docid ) {
if( $this->dbLink === null ) { // PDO resource, saved in the object.
throw new Exception( 'Must first connect to DB' );
}
if( $this->queryCheckAccess === null ) {
$query = 'SELECT * from something where id = :id';
$this->queryCheckAccess = $this->dbLink->prepare($query);
}
else {
$result = $this->queryCheckAccess->execute(array(':id'=>$docid));
}
}
それは問題になりますか?それとも、DB エンジン / PHP は、それが同じ準備済みステートメントであることを認識できるほどスマートなのでしょうか?
どうもありがとう。
- - - - - - - - - 編集 - - - - - - -
誤解されていたと思います。
私が尋ねるのは、私がそうするとどうなるかということです:
$query = 'SELECT * from something where id = :id';
$this->queryCheckAccess = $this->dbLink->prepare($query);
$query = 'SELECT * from something where id = :id';
$this->queryCheckAccess = $this->dbLink->prepare($query);
$query = 'SELECT * from something where id = :id';
$this->queryCheckAccess = $this->dbLink->prepare($query);
$query = 'SELECT * from something where id = :id';
$this->queryCheckAccess = $this->dbLink->prepare($query);
そして、私が行うとどうなりますか:
if( $this->queryCheckAccess === null ) {
$query = 'SELECT * from something where id = :id';
$this->queryCheckAccess = $this->dbLink->prepare($query);
}
エンジンは、最初の例でクエリを 4 回準備しますか? または、それが同じクエリであり、それを「ジャンプ」するだけであることに気付くでしょうか?