まとめ ブログ ダウンロード 掲示板 メール

れぶろぐ

< 2006-05-21 (日) 2006-05-25 (木) > 最新


2006-05-22 (月)

PDO で複数の SQL 文を連続実行するとエラーになる理由

PDO を使って、こんな感じのコードを書いていた。

$dbh = new PDO($dsn);

$sql = "SELECT * FROM table1 WHERE id='$id'";
$stmt = $dbh->prepare($sql);
$stmt->execute();
$row1 = $stmt->fetch();

$sql = "SELECT * FROM table2 WHERE id='$id'";
$stmt = $dbh->prepare($sql);
$stmt->execute();
$row2 = $stmt->fetch();

ところが、実行すると以下のようなエラーが出て止まってしまう。

Fatal error: Call to a member function execute() on a non-object.

エラーメッセージを見ると、 1回目でなく2回目の $stmt->execute(); でエラーになっている。 スクリプトの他の箇所では SQL 文をいくつも連続して実行できているのに、 なぜかここの箇所だけエラーになる。

試行錯誤して、 $stmt->fetch(); の後に $stmt = null; を追加してみたら、 一応動くようにはなった。 しかし、なぜそんな処理が必要になるのか、理由がさっぱり分からない。

そうしてさらに調べた結果、 PDOStatement::closeCursor のマニュアル に答えが書いてあった。 要するに、最後まで fetch しきらずに次の SQL 文の実行に移る場合は、 $stmt->closeCursor(); を実行する必要があるということか。

Tags: PHP | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink
本日のリンク元

編集