I'm using a bit(1) field to store boolean values and writing into the table using PDO prepared statements.
This is the test table:
CREATE TABLE IF NOT EXISTS `test` ( `SomeText` varchar(255) NOT NULL, `TestBool` bit(1) NOT NULL DEFAULT b'0' ) ENGINE=MEMORY DEFAULT CHARSET=latin1;
This is the test code:
$pdo = new PDO("connection string etc") ; $statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (?,?)') ; $statement->execute(array("TEST",0)) ;
Running that code gives me a row with value 1 under TestBool. And the same thing using bindValue() and bindParm(). I also tried named placeholders (instead of ?) with the same result.
Then I tried:
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES ("TEST",0)') ; $statement->execute() ;
Which worked properly (TestBool has value 0). Punching in the SQL directly into MySQL also works.
Note that inserting 1 always works.
So why would placeholders fail to insert the value 0? (and how do I actually do it?)