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(); を実行する必要があるということか。
[コメントを書く]
本日のリンク元
- 7 google検索(Call to a member function prepare() on a non-object)
- 6 google検索(php sql 実行)
- 6 http://www.about-reference.com/php/manual/function...
- 5 google検索(複数のSQL文)
- 4 google検索(PDO non-object)
- 4 google検索(pdo 複数 sql )
- 3 google検索(php pdo 連続)
- 3 google検索(Call to a member function fetch())
- 3 google検索(複数 sql php 実行)
- 3 google検索(php zend fetch 例)
- 3 google検索(PDO fetch エラー)
- 3 google検索(SQL実行方法 php)
- 3 google検索(Fatal error: Call to a member function execute() on a non-object)
- 3 google検索(Call to a member function Execute() on a non-object)
- 3 google検索(php Call to a member function fetch() on a non-object )
- 3 google検索(php sql文 複数)
- 3 google検索(PHP SQL文発行)
- 3 google検索(PDO 連続 PHP)
- 3 google検索(PDO 連続)
- 3 google検索(Call to a member function fetch() on a non-object in)
- 2 http://www.revulo.com/notify-NotifyUser_NONE_07121...
- 2 google検索(Call to a member function execute() on a non-object)
- 2 google検索(pdoでPager)
- 2 google検索(Call to a member function fetch() on a non-object)
- 2 google検索(pdo エラーメッセージ文字列)
- 2 google検索(SQL php 複数実行)
- 2 google検索(SQL PHP PDO)
- 2 google検索(sql 連続して実行)
- 2 google検索(Call to a member function execute() on a non-object )
- 2 google検索(pdo xrea)
- 2 google検索(PDo 複数 insert)
- 2 google検索(php sql 複数)
- 2 google検索(php pdo->prepare)
- 2 google検索(php pdo execute)
- 2 google検索(pdo prepare select エラー)
- 2 google検索(pdo fetch エラー)
- 2 google検索(PDO prepare エラー)
- 2 google検索(PDO fetch エラー)
- 2 google検索(PDO execute エラー)
- 2 google検索(PDO fetch)
- 2 google検索(Call to a member function fetch() on a non-object in )
- 2 google検索(Call to a member function fetch() on a non-object)
- 2 google検索(Call to a member function execute() on a non-object)
- 2 google検索(Call to a member function execute() on a non-object)
- 2 google検索(pepare PDO エラー)
- 2 google検索(PDO execute fetch)
- 2 google検索(PHP Fatal error pdo)
- 2 google検索(Call to a member function prepare() on a non-object )
- 2 google検索(stmt execute PDO)
- 2 google検索(sql 連続実行)
- 2 google検索(php sql 複数)
- 2 google検索(php 複数 prepare non-object)
- 2 google検索(execute() エラー 連続)
- 2 google検索(SQL 連続実行)
- 2 google検索(PHP PDO 複数実行)
- 2 google検索(PHP SQL エラー)
- 2 google検索(PDO fetch エラー)
- 2 google検索(Call to a member function prepare() on a non-object)
- 2 google検索(Call to a member function fetch() on a non-object )
- 2 google検索(Call to a member function fetch() on a non-object)
- 2 google検索(Call to a member function execute() on a non-object in)
- 2 google検索(Call to a member function execute() on a non-object)
- 2 google検索(Call to a member function Execute() on a non-object in)
- 2 google検索(Call to a member function Execute() on a non-object )
- 2 google検索(PHP Fatal error: Call to a member function fetch() on a non-object)
- 2 google検索(fetch() on a non-object)
- 2 google検索(Call to a member function fetch() on a non-object)
- 2 google検索(PHP SQL PDO)
- 2 http://www.google.co.jp/hws/search?hl=ja&q=zendfra...
- 2 http://www.google.co.jp/hws/search?hl=ja&q=php SQL...
- 2 http://www.google.co.jp/hws/search?hl=ja&q=Call to...
- 2 http://www.google.co.jp/hws/search?hl=ja&q= Call t...
- 2 http://www.about-reference.com/db/mysql-manual/sel...
- 2 http://72.14.235.104/search?q=cache:TMlAT7ZG85IJ:w...
- 2 http://209.85.175.104/search?q=cache:jUdwgrZR_EIJ:...
- 1 google検索(Call to a member function fetch() on a non-object )
- 1 google検索(t)
- 1 google検索(sql php 複数)
- 1 google検索(zend framework generated sql)
- 1 google検索(sql php 実行)
- 1 google検索(sql 実行 連続)
- 1 google検索(prepare 複数の値 php)
- 1 google検索(php for 2回連続エラー)
- 1 google検索(pdo Call to a member function execute)
- 1 google検索(pdo 最大文字数)
- 1 google検索(lo sql)
- 1 google検索(SQL文 複数)
- 1 google検索(PHP PDO 複数のSQL連続実行)
- 1 google検索(PDO $stmt->fetch)
- 1 google検索(複数 SQL 実行)
- 1 google検索(スクリプト 複数のsql)
- 1 google検索(php pdo)
- 1 google検索(PDO 複数)
- 1 google検索(php 複数SQl)
- 1 google検索(SQL 連続実行)
- 1 google検索(エラー Fatal error: Call to a member function Execute() on a non-object in)
- 1 google検索(sql execute() 複数)
- 1 google検索(PHP UPDATE PDO)
- 1 google検索(Call to a member function prepare() on a non-object)
- 1 google検索(php sql 複数select)
