Edit report at https://bugs.php.net/bug.php?id=50757&edit=1
ID: 50757
Comment by: dipan9876 at hotmail dot com
Reported by: christian at activemediaworks dot com
Summary: PDO MYSQL issue with BIT data type not setting
correct value
Status: Bogus
Type: Bug
Package: PDO related
Operating System: MAC OSX 10.5.8
PHP Version: 5.2.12
Block user comment: N
Private report: N
New Comment:
PDO is seriously crap. Having used .NET's beautiful ADO.Net, PDO almost feels
like
something thrown together by a college student. It's no wonder the community is
dropping PHP like a brick if this is the sort of developments being made these
days.
Previous Comments:
------------------------------------------------------------------------
[2010-03-24 12:55:33] [email protected]
No bug here. This is how crappy PDO works ever since. If you don't specify a
bind type, binding will use strings. Your code:
$stmt = $db->prepare("INSERT INTO mytable (mybit) VALUES (?)");
$stmt->execute(array(0));
... is equivalent to:
$stmt = $db->prepare("INSERT INTO mytable (mybit) VALUES ('0')");
$stmt->execute(array(0));
Which in turn inserts 1 into the BIT column.
------------------------------------------------------------------------
[2010-01-14 20:22:48] christian at activemediaworks dot com
Description:
------------
When trying to insert a row with a 0-value into a column of type BIT(1), if the
value for the column is not hard-coded into SQL statement, it causes the value
to be inserted to become 1. If it is hardcoded, it is okay.
Reproduce code:
---------------
/* This results in the value of the column being set to 1 (incorrect) */
$db = new PDO ( "mysql:dbname=db1234;host=localhost", "user1234", "pass1234" );
$stmt = $db->prepare("INSERT INTO mytable (mybit) VALUES (?)");
$stmt->execute(array(0));
db_disconnect($db);
/* This results in the value of the column being set to 0 (correct) */
$db = new PDO ( "mysql:dbname=db1234;host=localhost", "user1234", "pass1234" );
$stmt = $db->prepare("INSERT INTO mytable (mybit) VALUES (0)");
$stmt->execute();
db_disconnect($db);
Actual result:
--------------
The first example inserts a row with the column value set to 1 (wrong)
The second example inserts a row with the column value set to 0 (right)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=50757&edit=1