diff --git a/dibi/dibi.php b/dibi/dibi.php index fa0887cb..ddb1507f 100644 --- a/dibi/dibi.php +++ b/dibi/dibi.php @@ -260,6 +260,54 @@ class dibi extends NClass + /** + * Executes SQL query and fetch result - Monostate for DibiConnection::query() & fetch() + * + * @param array|mixed one or more arguments + * @return array + * @throws DibiException + */ + public static function fetch($args) + { + if (!is_array($args)) $args = func_get_args(); + + return self::getConnection()->query($args)->fetch(); + } + + + + /** + * Executes SQL query and fetch results - Monostate for DibiConnection::query() & fetchAll() + * + * @param array|mixed one or more arguments + * @return array + * @throws DibiException + */ + public static function fetchAll($args) + { + if (!is_array($args)) $args = func_get_args(); + + return self::getConnection()->query($args)->fetchAll(); + } + + + + /** + * Executes SQL query and fetch first column - Monostate for DibiConnection::query() & fetchSingle() + * + * @param array|mixed one or more arguments + * @return string + * @throws DibiException + */ + public static function fetchSingle($args) + { + if (!is_array($args)) $args = func_get_args(); + + return self::getConnection()->query($args)->fetchSingle(); + } + + + /** * Retrieves the ID generated for an AUTO_INCREMENT column by the previous INSERT query * Monostate for DibiConnection::insertId() diff --git a/dibi/drivers/odbc.php b/dibi/drivers/odbc.php index 17d18581..bef822b4 100644 --- a/dibi/drivers/odbc.php +++ b/dibi/drivers/odbc.php @@ -250,7 +250,7 @@ class DibiOdbcDriver extends NObject implements DibiDriverInterface */ public function fetch() { - return odbc_fetch_array($this->resultset, $this->row++); + return odbc_fetch_array($this->resultset, ++$this->row); } diff --git a/dibi/drivers/pdo.php b/dibi/drivers/pdo.php index 058fbaa1..e9f869ab 100644 --- a/dibi/drivers/pdo.php +++ b/dibi/drivers/pdo.php @@ -49,12 +49,6 @@ class DibiPdoDriver extends NObject implements DibiDriverInterface private $resultset; - /** - * Cursor - * @var int - */ - private $row = 0; - /** * Connects to a database @@ -204,7 +198,7 @@ class DibiPdoDriver extends NObject implements DibiDriverInterface */ public function rowCount() { - return $this->resultset->rowCount(); + throw new DibiDatabaseException('Row count is not available for unbuffered queries'); } @@ -217,7 +211,7 @@ class DibiPdoDriver extends NObject implements DibiDriverInterface */ public function fetch() { - return $this->resultset->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT, $this->row++); + return $this->resultset->fetch(PDO::FETCH_ASSOC); } @@ -231,7 +225,7 @@ class DibiPdoDriver extends NObject implements DibiDriverInterface */ public function seek($row) { - $this->row = $row; + throw new DibiDatabaseException('Cannot seek an unbuffered result set'); } diff --git a/examples/fetch.php b/examples/fetch.php index 8a91d8a1..5d2412c5 100644 --- a/examples/fetch.php +++ b/examples/fetch.php @@ -23,21 +23,26 @@ product_id | title */ +// fetch a single row +$row = dibi::fetch('SELECT title FROM [products]'); +print_r($row); // Chair +echo '