diff --git a/db.class.php b/db.class.php index 99c1d4b..ab18d45 100644 --- a/db.class.php +++ b/db.class.php @@ -821,10 +821,10 @@ class MeekroDB { $this->runHook('run_success', $hookHash); } - if (!($result instanceof MySQLi_Result)) return $result; // no results returned? - if ($opts_raw) return $result; if ($opts_walk) return new MeekroDBWalk($db, $result); - + if (!($result instanceof MySQLi_Result)) return $result; // query was not a SELECT? + if ($opts_raw) return $result; + $return = array(); if ($opts_fullcols) { @@ -938,18 +938,21 @@ class MeekroDBWalk { protected $result; protected $freed; - function __construct(MySQLi $mysqli, MySQLi_Result $result) { + function __construct(MySQLi $mysqli, $result) { $this->mysqli = $mysqli; $this->result = $result; } function next() { + // $result can be non-object if the query was not a SELECT + if (! ($this->result instanceof MySQLi_Result)) return; if ($row = $this->result->fetch_assoc()) return $row; else $this->free(); } function free() { if ($this->freed) return; + if (! ($this->result instanceof MySQLi_Result)) return; $this->result->free(); while ($this->mysqli->more_results()) { diff --git a/simpletest/WalkTest.php b/simpletest/WalkTest.php index 2cb36d3..f60c18d 100644 --- a/simpletest/WalkTest.php +++ b/simpletest/WalkTest.php @@ -12,8 +12,32 @@ class WalkTest extends SimpleTest { $this->assert(count($results) == 8); $this->assert($results[7]['username'] == 'vookoo'); } + + function test_2_walk_empty() { + $Walk = DB::queryWalk("SELECT * FROM accounts WHERE id>100"); - function test_2_walk_stop() { + $results = array(); + while ($row = $Walk->next()) { + $results[] = $row; + } + + $this->assert(count($results) == 0); + } + + function test_3_walk_insert() { + $Walk = DB::queryWalk("INSERT INTO profile (id) VALUES (100)"); + + $results = array(); + while ($row = $Walk->next()) { + $results[] = $row; + } + + $this->assert(count($results) == 0); + + DB::query("DELETE FROM profile WHERE id=100"); + } + + function test_4_walk_incomplete() { $Walk = DB::queryWalk("SELECT * FROM accounts"); $Walk->next(); unset($Walk);