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