diff --git a/lib/dml/pdo_moodle_recordset.php b/lib/dml/pdo_moodle_recordset.php index 7ae8650410b..c109821265f 100644 --- a/lib/dml/pdo_moodle_recordset.php +++ b/lib/dml/pdo_moodle_recordset.php @@ -21,7 +21,7 @@ * * @package moodlecore * @subpackage DML - * @copyright 2008 Andrei Bautu + * @copyright 2008 Petr Skoda (http://skodak.org) * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -33,40 +33,51 @@ require_once($CFG->libdir.'/dml/moodle_recordset.php'); class pdo_moodle_recordset extends moodle_recordset { private $sth; - protected $fields; - protected $rowCount = -1; + protected $current; public function __construct($sth) { $this->sth = $sth; $this->sth->setFetchMode(PDO::FETCH_ASSOC); + $this->current = $this->fetch_next(); + } + + public function __destruct() { + $this->close(); + } + + private function fetch_next() { + if ($row = $this->sth->fetch()) { + $row = array_change_key_case($row, CASE_LOWER); + } + return $row; } public function current() { - return (object)$this->fields; + return (object)$this->current; } public function key() { /// return first column value as key - return reset($this->fields); + if (!$this->current) { + return false; + } + $key = reset($this->current); + return $key; } public function next() { - $this->fields = $this->sth->fetch(); - if ($this->fields) { - ++$this->rowCount; - } - return $this->fields !== false; + $this->current = $this->fetch_next(); } public function valid() { - if($this->rowCount < 0) { - $this->rewind(); - } - return $this->fields !== FALSE; + return !empty($this->current); } public function close() { - $this->sth->closeCursor(); - $this->sth = null; + if ($this->sth) { + $this->sth->closeCursor(); + $this->sth = null; + } + $this->current = null; } }