diff --git a/code/PostgreSQLQuery.php b/code/PostgreSQLQuery.php index 0b96c61..f010a11 100644 --- a/code/PostgreSQLQuery.php +++ b/code/PostgreSQLQuery.php @@ -58,8 +58,10 @@ public function __destruct() public function seek($row) { - pg_result_seek($this->handle, $row); - return $this->nextRecord(); + // Specifying the zero-th record here will reset the pointer + $result = pg_fetch_array($this->handle, $row, PGSQL_NUM); + + return $this->parseResult($result); } public function numRecords() @@ -73,26 +75,35 @@ public function nextRecord() // Correct non-string types if ($row) { - $record = []; + return $this->parseResult($row); + } - foreach ($row as $i => $v) { - $k = $this->columnNames[$i]; - $record[$k] = $v; - $type = pg_field_type($this->handle, $i); - if (isset(self::$typeMapping[$type])) { - if ($type === 'bool' && $record[$k] === 't') { - $record[$k] = 1; + return false; + } + + /** + * @param array $row + * @return array + */ + protected function parseResult(array $row) + { + $record = []; + + foreach ($row as $i => $v) { + $k = $this->columnNames[$i]; + $record[$k] = $v; + $type = pg_field_type($this->handle, $i); + if (isset(self::$typeMapping[$type])) { + if ($type === 'bool' && $record[$k] === 't') { + $record[$k] = 1; // Note that boolean 'f' will be converted to 0 by this - } else { - settype($record[$k], self::$typeMapping[$type]); - } + } else { + settype($record[$k], self::$typeMapping[$type]); } } - - return $record; } - return false; + return $record; } }