PDOStatement::closeCursor
(PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.9.0)
PDOStatement::closeCursor — カーソルを閉じてステートメントを再実行できるようにする
説明
public PDOStatement::closeCursor ( ) : bool
PDOStatement::closeCursor() は、 他の SQL ステートメントを発行できるようにサーバーへの接続を解放しますが、 ステートメントは再実行可能な状態のまま残されます。
このメソッドは以前に実行された PDOStatement オブジェクトが行をまだフェッチしていない場合に PDOStatement オブジェクトの実行をサポートしていないデータベースドライバに対して有用です。 もし使用しているデータベースドライバがこの制限を受ける場合、 out-of-sequence エラーが出力されます。
PDOStatement::closeCursor() は、 オプションのドライバ固有のメソッド (最大の効率を得るため) もしくはドライバ固有の関数がインストールされていない場合の汎用的な PDO フォールバックとして実装されています。 汎用的な PDO フォールバックは、PHP スクリプト中に以下のようなコードを書くことと意味的に等価です。
<?phpdo { while ($stmt->fetch()) ; if (!$stmt->nextRowset()) break;} while (true);?>
返り値
成功した場合に true
を、失敗した場合に false
を返します。
例
例1 PDOStatement::closeCursor() の例
以下の例では、PDOStatement オブジェクト $stmt
は複数の行を返しますが、このアプリケーションは先頭行のみフェッチし、
PDOStatement オブジェクトをフェッチしていない行がある状態のままにします。
このアプリケーションがが全てのデータベースドライバで動作するよう、
PDOStatement オブジェクト $otherStmt
を実行する前に
$stmt
に対して
PDOStatement::closeCursor()
の呼び出しを挿入しています。
<?php/* PDOStatement オブジェクトを生成する */$stmt = $dbh->prepare('SELECT foo FROM bar');/* 第二の PDOStatement オブジェクトを生成する */$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');/* 最初の文を実行する */$stmt->execute();/* 結果から先頭行のみフェッチする */$stmt->fetch();/* 続く closeCursor() のコールはいくつかのドライバでは必要となる */$stmt->closeCursor();/* ここで第二の文を実行することができる */$otherStmt->execute();?>