#36578 [Bgs->Opn]: $stmt->fetch() on empty resultset does nothing
| From: | terry at bitsoup dot com | Date: | Thu, 02 Mar 2006 16:25:23 +0000 |
| Subject: | #36578 [Bgs->Opn]: $stmt->fetch() on empty resultset does nothing | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-93843@lists.php.net to get a copy of this message | ||
ID: 36578
User updated by: terry at bitsoup dot com
Reported By: terry at bitsoup dot com
-Status: Bogus
+Status: Open
Bug Type: PDO related
Operating System: Windows XP
PHP Version: 5.1.2
New Comment:
The empty resultset is not the error. Calling fetch() on an empty
resultset sets the error code to a warning and/or generates an
exception in every database engine I've seen.
In Oracle, it's error ORA-1403: no data found.
It's SQL_NODATA in ODBC drivers.
I believe it's Error 2053 in MySQL. mysql_stmt_fetch() returns
MYSQL_NO_DATA, and not 0 for success.
In it's current state, fetch() returning null without raising the
exception means we'll have to add the test and throw the exception
manually on every single query.
Previous Comments:
------------------------------------------------------------------------
[2006-03-02 08:42:51] tony2001@php.net
Empty resultset is not an error, it's a common situation.
No bug here.
------------------------------------------------------------------------
[2006-03-01 20:01:39] terry at bitsoup dot com
Sorry, error code should be 02, not 20
------------------------------------------------------------------------
[2006-03-01 19:59:35] terry at bitsoup dot com
Description:
------------
A fetch against a statment that returns an empty resultset doesn't set
any PDO error information, nor does it raise an exception.
Testing against MySQL 5.0.18
Reproduce code:
---------------
Database connection is successful, and mode is set to throw
exceptions:
try
{
$sth = $dbh->prepare("SELECT * from any_table where 1=2");
$sth->execute();
$row = $sth->fetch();
echo "ERROR=" . $sth->errorCode();
}
catch (PDOException $e)
{
dbg("DB Error!: " . $e->getMessage());
die();
}
Expected result:
----------------
Either
ERROR=20
when not using exceptions, or an exception.
Actual result:
--------------
ERROR=00
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=36578&edit=1