pg_last_error() doesn"t return connection errors

pg_last_error() doesn"t return connection errors

am 26.08.2010 13:44:44 von Frank Naude

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:

$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!

Best regards.

Frank

--
Sent via pgsql-php mailing list (pgsql-php@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-php

Re: pg_last_error() doesn"t return connection errors

am 27.08.2010 00:44:33 von Andrew McMillan

--=-vq+W4TC3b+4EHX5F3VeE
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, 2010-08-26 at 13:44 +0200, Frank Naude wrote:
> Hi,
>=20
> 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.
>=20
> Here is an example:
>=20
> > $c =3D pg_connect('host=3D127.0.0.1 user=3Dpostgres password=3Dxxx
> dbname=3Dyyy') or var_dump( pg_last_error() );
> ?>
>=20
> The following output (with warnings) is returned:
>=20
> 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)
>=20
> 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.

--=20
------------------------------------------------------------ ------------
andrew (AT) morphoss (DOT) com +64(272)DEBIAN
Flexibility is overrated. Constraints are liberating.
------------------------------------------------------------ ------------


--=-vq+W4TC3b+4EHX5F3VeE
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iQIcBAABAgAGBQJMdu5OAAoJEOr8/r+P646/WqUP/1StfwqkOx/FoKkrr1MV ajqW
fi52xNX2QtKlew4ZiOIOOphyFkVIY6krOMIM6AyH6lVIU1gxBC1lC2JnYHJd cAOq
xsNNZwwAG46+5Rq+YtMRT89YMd3nPlSMZDMGF1gc2V3MoGmvit4skyzUuabY am6m
dx5CbmcIs9eUAoB2sBvCnS56f/NkEcTxyRuvGa3QuNyqi+hP0V5VXqEaykW6 xyd2
wsaYvb/VT8D7kXSNOnIhs/JibwUDdCeIs0iekNdhDQNeYhTRg9p9m3XQBIF0 ehgm
vVV50QeSwoLPDGZBZPilCiao7q6x578gqNwrSyI1zqTQUFeH0o/ajTE3J8vB BLR6
OlFAgGe9tqi2xJ5LDJ6H7X6MoXMNABcyqjUO0bJGKlbj+h73BQOqFpDvR+7R cTKc
vTX3TnAu82LIn9HfEcTX6kaFdOQztj4Bu5z9mGXFoyI2/OCnkiHYUKlgrg8S ep0d
M0zLl6WKEs0gZivACN5uzlGEpXggADrphHB3jS+TwKSmQko7KWIcZ17p/+n1 Luzx
5PTvRr6XtnM0yGo7OHpCXcS8ogWVgmK989b9/h2YlyruDL0uXFX2+HptgHYl EJQX
umGaRb+WIKxbI/KN5iGR1eBeYE7WeCSi3LZTjXrXbcQ7h2Xef/7yHFo5RNFx xhAD
qP0ZZvDeGCAUDaHEy6Tg
=Ri52
-----END PGP SIGNATURE-----

--=-vq+W4TC3b+4EHX5F3VeE--

Re: pg_last_error() doesn"t return connection errors

am 27.08.2010 11:17:18 von Frank Naude

Hi Andrew,

Thank you very much for the reply!

> Alternatively, does pg_errormessage() have the same flaw...?

Unfortunately pg_errormessage() doesn't work either. It returns:

Warning: pg_errormessage() [function.pg-errormessage]: No PostgreSQL
link opened yet in...

> That behaviour doesn't seem particularly unnatural to me,...

It is inconsistent with how the other DB modules behave. I can provide
you with some examples if it would help.

Best regards.

Frank

--
Sent via pgsql-php mailing list (pgsql-php@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-php

Re: pg_last_error() doesn"t return connection errors

am 27.08.2010 12:22:40 von Grzegorz Ornoch

--0022152d5fb5cdf79e048ecb7fcc
Content-Type: text/plain; charset=UTF-8

Hi
Try this function

/**
* @name pg_error
*
* @param pg resource result
* @param pg resource connection
*
* @return string content of the error pg
*
*/
function pg_error($result, $connection)
{
return ($result === false ? pg_last_error($connection) :
pg_result_error($result));
}
--
Regards
Grzegorz Ornoch


On Fri, Aug 27, 2010 at 11:17 AM, Frank Naude wrote:

> Hi Andrew,
>
> Thank you very much for the reply!
>
> > Alternatively, does pg_errormessage() have the same flaw...?
>
> Unfortunately pg_errormessage() doesn't work either. It returns:
>
> Warning: pg_errormessage() [function.pg-errormessage]: No PostgreSQL
> link opened yet in...
>
> > That behaviour doesn't seem particularly unnatural to me,...
>
> It is inconsistent with how the other DB modules behave. I can provide
> you with some examples if it would help.
>
> Best regards.
>
> Frank
>
> --
> Sent via pgsql-php mailing list (pgsql-php@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-php
>

--0022152d5fb5cdf79e048ecb7fcc
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Hi
Try this function

ss=3D"Apple-style-span" face=3D"'courier new', monospace"> =C2=
=A0  /**
9;courier new', monospace">     * @name    pg_=
error


ace">     *
" face=3D"'courier new', monospace">     * @param =
  pg resource result


=
     * @param   pg resource connection
> >     *


=
     * @return  string  
e-style-span" style=3D"font-size: 12px; "> face=3D"'courier new', monospace">content of the error pg pan>


ace">     *
" face=3D"'courier new', monospace">     */ div>
nospace">    function pg_error($result, $connection)<=
/div>

ace">    {
face=3D"'courier new', monospace">       =C2=
=A0return ($result ===3D false ? pg_last_error($connection) : pg_result=
_error($result));


ace">    }
--
Regards
=
  Grzegorz Ornoch



On Fri, Aug 27, 2010 at 11:17 AM, Frank =
Naude <naudefj@gm=
ail.com
>
wrote:
"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Hi Andrew,



Thank you very much for the reply!



> Alternatively, does pg_errormessage() have the same flaw...?



Unfortunately pg_errormessage() doesn't work either. It returns:



Warning: pg_errormessage() [function.pg-errormessage]: No PostgreSQL

link opened yet in...



> That behaviour doesn't seem particularly unnatural to me,...



It is inconsistent with how the other DB modules behave. I can provide

you with some examples if it would help.



Best regards.



Frank



--

Sent via pgsql-php mailing list ( ">pgsql-php@postgresql.org)

To make changes to your subscription:

=
http://www.postgresql.org/mailpref/pgsql-php





--0022152d5fb5cdf79e048ecb7fcc--

Re: pg_last_error() doesn"t return connection errors

am 27.08.2010 14:26:33 von Frank Naude

Hi Grzegorz,

On Fri, Aug 27, 2010 at 12:22 PM, Grzegorz Ornoch wrote:
> Try this function...

Nice function, but since we cannot connect, and we do not have a
connection, it wouldn't help much either.

Best regards.

Frank

--
Sent via pgsql-php mailing list (pgsql-php@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-php

Re: pg_last_error() doesn"t return connection errors

am 27.08.2010 14:33:41 von Frank Naude

Hi Andrew,

On Fri, Aug 27, 2010 at 2:01 PM, Andrew McMillan wrot=
e:
> Since I've migrated to PDO, and only have a bit of legacy stuff around
> that uses pg_* I don't think it will do me any good at all! =A0I really
> try to let other people do all of the coding against other databases, so
> I can luxuriate in the One True SQL :-)

I'm fully aware that the pdo_pgsql works as it should - here is an example:

try {
$c =3D new PDO('pgsql:host=3D127.0.0.1 user=3Dpostgres password=3Dxxx
dbname=3Dyyy', 'postgres', 'xxx');
} catch (PDOException $e) {
var_dump( $e->getMessage() );
}

However, the pgsql driver needs some updating or should be deprecated.

Best regards.

Frank

--=20
Sent via pgsql-php mailing list (pgsql-php@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-php