PDOStatement::closeCursor — ステートメントを再度実行できるようにカーソルを閉じます。 (PHP 5 >= 5.1.0、PECL pdo >= 0.9.0)
bool PDOStatement::closeCursor ( void )
PDOStatement::closeCursor() は、他の SQL ステートメントを発行できるようにデータベース サービスへの接続を解放しますが、ステートメントは再度実行できる状態のままにします。
このメソッドは、最後に実行された PDOStatement オブジェクトにまだフェッチされていない行がある場合に、別の PDOStatement オブジェクトの実行をサポートしていないデータベース ドライバーにとって非常に便利です。 データベース ドライバーがこの制限の影響を受ける場合、順序どおりでないエラーが発生する可能性があります。
PDOStatement::closeCursor() は、オプションのドライバー固有のメソッド (最も効率的) として実装されるか、ドライバー固有の機能がない場合の一般的な PDO フォールバックとして実装されます。一般的なフォールバック セマンティクスは、次の PHP コードと同じです。
<?phpdo { while ($stmt->fetch()) ; if (!$stmt->nextRowset()) Break;} while (true);?>
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
次の例では、$stmt PDOStatement オブジェクトは複数の行を返しますが、アプリケーションは最初の行のみをフェッチし、PDOStatement オブジェクトはフェッチされていない行がある状態のままになります。アプリケーションがすべてのデータベース ドライバーで正常に実行できることを確認するために、$stmt は $otherStmt PDOStatement オブジェクトを実行する前に PDOStatement::closeCursor() を 1 回呼び出します。
<?php/* PDOStatement オブジェクトを作成します */$stmt = $dbh->prepare('SELECT foo FROM bar');/* 2 番目の PDOStatement オブジェクトを作成します */$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');/* 最初のステートメントを実行*/$stmt->execute();/*結果セットから最初の行のみをフェッチします */$stmt->fetch();/* 一部のドライバーでは次の closeCursor() の呼び出しが必要になる場合があります */$stmt->closeCursor();/* これで実行できるようになります2 番目のステートメント*/$otherStmt->execute();?>