PDOstatement (MySQL): inserir o valor 0 em um campo de bit (1) resulta em 1 escrito na tabela
Estou usando um campo bit (1) para armazenar valores booleanos e gravar na tabela usando instruções preparadas pelo PDO.
Esta é a tabela de testes:
<code>CREATE TABLE IF NOT EXISTS `test` ( `SomeText` varchar(255) NOT NULL, `TestBool` bit(1) NOT NULL DEFAULT b'0' ) ENGINE=MEMORY DEFAULT CHARSET=latin1; </code>
Este é o código de teste:
<code>$pdo = new PDO("connection string etc") ; $statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (?,?)') ; $statement->execute(array("TEST",0)) ; </code>
Executar esse código me fornece uma linha com valor 1 em TestBool. E a mesma coisa usando bindValue () e bindParm (). Eu também tentei espaços reservados nomeados (em vez de?) Com o mesmo resultado.
Então eu tentei:
<code>$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES ("TEST",0)') ; $statement->execute() ; </code>
Qual funcionou corretamente (TestBool tem valor 0). Punching no SQL diretamente no MySQL também funciona.
Note que inserir 1 sempre funciona.
Então, por que os espaços reservados não inserem o valor 0? (e como eu realmente faço isso?)