Discussion:
PHP and PostgreSQL boolean data type
Thom Brown
2010-02-10 12:04:23 UTC
Permalink
Hi,

A long-standing problem we've had with PostgreSQL queries in PHP is
that the returned data for boolean columns is the string 'f' instead
of the native boolean value of false.

An obvious example of this would be for a table with users and their
boolean registered status:

Select user, registered From users;

Then getting a row from the result would reveal: array('user' =>
'thomb', registered => 'f');

Another problem is with arrays, where they are difficult to parse as
they also come through as plain strings with no binary alternative.

Is this a limitation of libpq or a flawed implementation in the php
library? And if this is just the case for backwards-compatibility, is
there a way to switch it to a more sensible PHP data type?

Thanks

Thom
--
Sent via pgsql-php mailing list (pgsql-***@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-php
A. Kretschmer
2010-02-10 12:11:42 UTC
Permalink
Post by Thom Brown
Hi,
A long-standing problem we've had with PostgreSQL queries in PHP is
that the returned data for boolean columns is the string 'f' instead
of the native boolean value of false.
http://andreas.scherbaum.la/blog/archives/302-BOOLEAN-datatype-with-PHP-compatible-output.html

Regards, Andreas
--
Andreas Kretschmer
Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)
GnuPG: 0x31720C99, 1006 CCB4 A326 1D42 6431 2EB0 389D 1DC2 3172 0C99
--
Sent via pgsql-general mailing list (pgsql-***@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general
Thom Brown
2010-02-10 12:44:35 UTC
Permalink
On 10 February 2010 12:11, A. Kretschmer
Post by A. Kretschmer
Post by Thom Brown
Hi,
A long-standing problem we've had with PostgreSQL queries in PHP is
that the returned data for boolean columns is the string 'f' instead
of the native boolean value of false.
http://andreas.scherbaum.la/blog/archives/302-BOOLEAN-datatype-with-PHP-compatible-output.html
Thanks guys. I can see that this is specifically a PHP issue then.
It seems like an extreme workaround though. I'd rather see the PHP
library updated in a way that would somehow not break existing code
which checked for an 'f'. Not quite sure what the solution would be.

Thanks

Thom
--
Sent via pgsql-general mailing list (pgsql-***@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general
Tommy Gildseth
2010-02-10 12:13:22 UTC
Permalink
Post by Thom Brown
Is this a limitation of libpq or a flawed implementation in the php
library? And if this is just the case for backwards-compatibility, is
there a way to switch it to a more sensible PHP data type?
Using PDO(http://no.php.net/pdo) will at least give you native values
for true/false. Arrays, I don't know, since I don't use them.
--
Tommy Gildseth
--
Sent via pgsql-general mailing list (pgsql-***@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general
Chris
2010-02-10 21:56:36 UTC
Permalink
Post by Thom Brown
Hi,
A long-standing problem we've had with PostgreSQL queries in PHP is
that the returned data for boolean columns is the string 'f' instead
of the native boolean value of false.
An obvious example of this would be for a table with users and their
Select user, registered From users;
Then getting a row from the result would reveal: array('user' =>
'thomb', registered => 'f');
That's how postgres stores them, php doesn't understand the field is a
boolean.

# create table a(a int, b boolean);
# insert into a(a, b) values (1, true);
# insert into a(a, b) values (2, false);
# SELECT * from a;
a | b
---+---
1 | t
2 | f
(2 rows)

Also while not in the "official" docs, it is a note from 2002:

http://www.php.net/manual/en/ref.pgsql.php#18749

and

http://www.php.net/manual/en/function.pg-fetch-array.php says

Each value in the array is represented as a string. Database NULL
values are returned as NULL.
Post by Thom Brown
Another problem is with arrays, where they are difficult to parse as
they also come through as plain strings with no binary alternative.
Haven't played with postgres arrays so can't say either way - but same
as above, php just fetches the data.

There's an example that might help you -
http://www.php.net/manual/en/ref.pgsql.php#89841
--
Postgresql & php tutorials
http://www.designmagick.com/
--
Sent via pgsql-php mailing list (pgsql-***@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-php
Torsten Zühlsdorff
2010-02-11 07:42:35 UTC
Permalink
Post by Thom Brown
A long-standing problem we've had with PostgreSQL queries in PHP is
that the returned data for boolean columns is the string 'f' instead
of the native boolean value of false.
This problem is solved since nearly 5 years with PDO. You can use an
abstraction like DDDBL (see my signature) if you want to save time while
using PDO.

Greetings from Germany,
Torsten
--
http://www.dddbl.de - ein Datenbank-Layer, der die Arbeit mit 8
verschiedenen Datenbanksystemen abstrahiert,
Queries von Applikationen trennt und automatisch die Query-Ergebnisse
auswerten kann.
--
Sent via pgsql-general mailing list (pgsql-***@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general
Torsten Zühlsdorff
2010-02-10 14:15:18 UTC
Permalink
Post by Thom Brown
A long-standing problem we've had with PostgreSQL queries in PHP is
that the returned data for boolean columns is the string 'f' instead
of the native boolean value of false.
This problem is solved since nearly 5 years with PDO. You can use an
abstraction like DDDBL (see my signature) if you want to save time while
using PDO.

Greetings from Germany,
Torsten
--
http://www.dddbl.de - ein Datenbank-Layer, der die Arbeit mit 8
verschiedenen Datenbanksystemen abstrahiert,
Queries von Applikationen trennt und automatisch die Query-Ergebnisse
auswerten kann.
--
Sent via pgsql-general mailing list (pgsql-***@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general
Loading...