Re: pg_last_error() doesn't return connection errors

Andrew McMillan <[email protected]> Fri, 27 Aug 2010 10:44:33 +1200
Newsgroups gmane.comp.db.postgresql.php
Message-ID <[email protected]>
On Thu, 2010-08-26 at 13:44 +0200, Frank Naude wrote:
> Hi,
> 
> I can successfully connect to PostgreSQL (pgsql extension). However,
> when I make a deliberate mistake, I'm unable to capture the connection
> error with pg_last_error() as one would with the *_last_error()
> functions of other database extensions.
> 
> Here is an example:
> 
> <?php
> $c = pg_connect('host=127.0.0.1 user=postgres password=xxx
> dbname=yyy') or var_dump( pg_last_error() );
> ?>
> 
> The following output (with warnings) is returned:
> 
> Warning: pg_connect() [function.pg-connect]: Unable to connect to
> PostgreSQL server: FATAL: password authentication failed for user
> "postgres" in ..
> Warning: pg_last_error() [function.pg-last-error]: No PostgreSQL link
> opened yet in ...
> bool(false)
> 
> One would expect pg_last_error() to return "password authentication
> failed" instead of FALSE!

Hi Frank,

Presumably pg_last_error() doesn't do anything useful until after the
database connection has been made...

That behaviour doesn't seem particularly unnatural to me, really, though
this seems an unlikely place to be posting a bug about it.  If it's a
problem for you perhaps you should file a bug with the developer.

Alternatively, does pg_errormessage() have the same flaw, or does that
give you the error details that you're after?  That's what I use in my
own code, although I note that in my own code I only log the fact of
connection failure, without logging the reason, and I use that for
getting the error when a query fails.  Perhaps something I should
improve :-)

Cheers,
					Andrew.

-- 
------------------------------------------------------------------------
andrew (AT) morphoss (DOT) com                            +64(272)DEBIAN
         Flexibility is overrated.  Constraints are liberating.
------------------------------------------------------------------------
signature.asc (application/pgp-signature, 836 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iQIcBAABAgAGBQJMdu5OAAoJEOr8/r+P646/WqUP/1StfwqkOx/FoKkrr1MVajqW
fi52xNX2QtKlew4ZiOIOOphyFkVIY6krOMIM6AyH6lVIU1gxBC1lC2JnYHJdcAOq
xsNNZwwAG46+5Rq+YtMRT89YMd3nPlSMZDMGF1gc2V3MoGmvit4skyzUuabYam6m
dx5CbmcIs9eUAoB2sBvCnS56f/NkEcTxyRuvGa3QuNyqi+hP0V5VXqEaykW6xyd2
wsaYvb/VT8D7kXSNOnIhs/JibwUDdCeIs0iekNdhDQNeYhTRg9p9m3XQBIF0ehgm
vVV50QeSwoLPDGZBZPilCiao7q6x578gqNwrSyI1zqTQUFeH0o/ajTE3J8vBBLR6
OlFAgGe9tqi2xJ5LDJ6H7X6MoXMNABcyqjUO0bJGKlbj+h73BQOqFpDvR+7RcTKc
vTX3TnAu82LIn9HfEcTX6kaFdOQztj4Bu5z9mGXFoyI2/OCnkiHYUKlgrg8Sep0d
M0zLl6WKEs0gZivACN5uzlGEpXggADrphHB3jS+TwKSmQko7KWIcZ17p/+n1Luzx
5PTvRr6XtnM0yGo7OHpCXcS8ogWVgmK989b9/h2YlyruDL0uXFX2+HptgHYlEJQX
umGaRb+WIKxbI/KN5iGR1eBeYE7WeCSi3LZTjXrXbcQ7h2Xef/7yHFo5RNFxxhAD
qP0ZZvDeGCAUDaHEy6Tg
=Ri52
-----END PGP SIGNATURE-----