PHP 4.0 Bug #7141 Updated: pg_exec returns true even though it failed
| From: | jah@php.net | Date: | Sat, 28 Oct 2000 04:01:43 +0000 |
| Subject: | PHP 4.0 Bug #7141 Updated: pg_exec returns true even though it failed | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-36184@lists.php.net to get a copy of this message | ||
ID: 7141
Updated by: jah
Reported By: dbi@xmission.com
Status: Closed
Bug Type: PostgreSQL related
Assigned To:
Comments:
I agree that the docs could be a bit more clear about the return value of
pg_exec(). But this is *not* a bug. Even a SELECT that doesn't return any rows
still succeeds and returns a resource id. You'll have to test whether it returned
any rows with pg_numrows(). See the example of pg_fetch_row() in manual.
pg_exec() returns FALSE in the case that the query couldn't be executed at all,
for example because it was malformed or the PostgreSQL server itself encountered
some other error (no privileges to select from a table etc.).
Previous Comments:
---------------------------------------------------------------------------
[2000-10-11 17:26:37] dbi@xmission.com
When I execute the following code segment with the $EmailAddress and $Password variables set to
values that exist in the PostgreSQL 6.5.3 table, everything works fine.
When I execute it with values that are NOT in the table, pg_exec still returns a "true"
value even though the SELECT statement never found any matching rows. (This is contrary to what the
documentation implies when it tests for !$result.)
The actual value of the $query variable, even when the query sent by the pg_exec function fails, is
"Resource id #2". Because it's not falst, there's no way to test whether the
query succeeded. So when the program goes on to execute the pg_fetch_array function, the $query
variable points to nothing and the program dies with an error message.
-------------------------------
<?php
// -- This module checks a username and password to see who the user is.)
$db = pg_connect("", "", "", "", "tracker");
if ($db) {
$SQLQuery = "SELECT userid FROM users WHERE username = '" . $EmailAddress .
"' AND password = '" . $Password . "';";
$query = pg_exec($db, $SQLQuery);
if ($query) {
$row = 0;
if ($data = pg_fetch_array($query, $row)) {
// Etc...
---------------------------------------------------------------------------
Full Bug description available at: http://bugs.php.net/?id=7141