Bug->Req #68156 [Asn]: pg_query_params Sets Boolean False to Blank String

From: Date: Sun, 19 Oct 2014 02:43:52 +0000
Subject: Bug->Req #68156 [Asn]: pg_query_params Sets Boolean False to Blank String
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-188184@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=68156&edit=1

 ID:                 68156
 Updated by:         yohgaki@php.net
 Reported by:        nexisentertainment at gmail dot com
 Summary:            pg_query_params Sets Boolean False to Blank String
 Status:             Assigned
-Type:               Bug
+Type:               Feature/Change Request
 Package:            PostgreSQL related
 Operating System:   Debian Linux (Jessie)
 PHP Version:        5.6.1
 Assigned To:        yohgaki
 Block user comment: N
 Private report:     N

 New Comment:

IIRC, PostgreSQL does not support true/false since 6.x.
http://www.postgresql.org/docs/9.3/static/datatype-boolean.html

Valid literal values for the "true" state are:

TRUE
't'
'true'
'y'
'yes'
'on'
'1'For the "false" state, the following values can be used:
FALSE
'f'
'false'
'n'
'no'
'off'
'0'

So, this behavior is not a bug. It could be feature request.


Previous Comments:
------------------------------------------------------------------------
[2014-10-05 09:30:00] nexisentertainment at gmail dot com

Created a simplified test phpt.  Used it to verify the issue still exists on git (commit
429e1b45a7cd2f491e836f4bffa57c72beb6128b).

https://gist.github.com/N3X15/56ab6238a5a8e57bdc32

Can link if someone hates gists.  Will now attempt to sleep.

------------------------------------------------------------------------
[2014-10-05 07:50:48] nexisentertainment at gmail dot com

Should be more clear.

------------------------------------------------------------------------
[2014-10-05 07:45:36] nexisentertainment at gmail dot com

Description:
------------
pg_query_params somehow converts (boolean)false (as a parameter) to a blank string before sending it
to postgres.

Note, behavior has not been documented, but has been mentioned by a user comment: http://php.net/manual/en/function.pg-query-params.php#115063

I therefore conclude I am not crazy and imagining things.

May be related to #19575.

Test script:
---------------
<?php
// NOTE:  General layout unabashedly stolen from [FILE] of https://github.com/php/php-src/blob/master/ext/pgsql/tests/bug64609.phpt
$conn_str='user=test password=test host=localhost dbname=test';
error_reporting(E_ALL);
$db = pg_connect($conn_str);
foreach(array(TRUE,FALSE) as $bool) {
    echo "Inserting ".($bool?'true':'false');
    pg_query("BEGIN");
    pg_query("CREATE TABLE test_bool_table (a boolean)");
    $values = array($bool);
    pg_query_params($db,'INSERT INTO test_bool_table (a) VALUES ($1)',$values);
    pg_query("ROLLBACK");
}

Expected result:
----------------
No errors, output of:

  Inserting true
  Inserting false

Actual result:
--------------
Inserting true
Inserting false
Warning: pg_query_params(): Query failed: ERROR: invalid input syntax for type boolean: ""
in /host/[NOPE]/htdocs/testpgbug.php on line 13


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=68156&edit=1


Thread (9 messages)

« previous php.bugs (#188184) next »