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

 ID:                 62593
 Comment by:         ploginoff at gmail dot com
 Reported by:        mascione at sviluppo dot toscana dot it
 Summary:            Emulate prepares behave strangely with PARAM_BOOL
 Status:             Open
 Type:               Bug
 Package:            PDO related
 Operating System:   Ubuntu 10.04
 PHP Version:        5.3.14
 Block user comment: N
 Private report:     N

 New Comment:

Yes! _Yesterday_ I have * with the same bug. Solution: install 5.3.13 or 
disable emulate prepares (but it is sometimes necessary).


Previous Comments:
------------------------------------------------------------------------
[2012-07-18 10:04:51] mascione at sviluppo dot toscana dot it

Description:
------------
On postgresql when I use ATTR_EMULATE_PREPARES binding params or values with 
PARAM_BOOL behave strangely.

Disabling ATTR_EMULATE_PREPARES resolve the problem.

(driver specific PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT generates same 
problem)

(Related to bug #38386 ?)

Test script:
---------------
$db = new PDO('pgsql:dbname=testdb;user=postgres');
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
//$db->setAttribute(PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT, true);
//CREATE TABLE t(a boolean, b boolean)
$stmt = $db->prepare("INSERT INTO t(a,b) VALUES (true,false)");
$stmt->execute();
print_r($stmt->errorInfo());
$stmt = $db->prepare("INSERT INTO t(a,b) VALUES (:test,:test)");
$stmt->bindValue('test', false, PDO::PARAM_BOOL);
$stmt->execute();
print_r($stmt->errorInfo());
$stmt = $db->prepare("SELECT * FROM t WHERE :test");
$stmt->bindValue('test', true, PDO::PARAM_BOOL);
$stmt->execute();
print_r($stmt->errorInfo());
print_r($stmt->fetchAll());


Expected result:
----------------
Works without errors.

Actual result:
--------------
Array
(
    [0] => 00000
    [1] => 
    [2] => 
)
Array
(
    [0] => 42804
    [1] => 7
    [2] => ERROR:  column "a" is of type boolean but expression is of type 
integer
LINE 1: INSERT INTO t(a,b) VALUES (0,'0')
                                   ^
HINT:  You will need to rewrite or cast the expression.
)
Array
(
    [0] => 42804
    [1] => 7
    [2] => ERROR:  argument of WHERE must be type boolean, not type integer
LINE 1: SELECT * FROM t WHERE 1
                              ^
)


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



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

Reply via email to