Колоната BIT е двоичен тип в mysql (въпреки че е документиран като числов тип - това не е съвсем вярно) и съветвам да го избягвате поради проблеми с клиентските библиотеки (което проблемът с PDO доказва). Ще си спестите много проблеми, ако промените типа на колоната на TINYINT(1)
TINYINT(1) разбира се ще консумира пълен байт място за съхранение за всеки ред, но според mysql docs BIT(1) също ще направи.
от:http://dev.mysql.com/doc /refman/5.1/en/storage-requirements.html
изискването за битово съхранение е:приблизително (M+7)/8 байта, което предполага, че колоната BIT(M) също е подравнена по байтове.
Също така намерих това:https://bugs.php.net/bug.php? id=50757
Така че можете да проверите дали следният код работи както очаквате:
$pdo = new PDO("connection string etc") ;
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (:someText,:testBool)') ;
$statement->bindValue(':someText', "TEST");
$statement->bindValue(':testBool', 0, PDO::PARAM_INT);
$statement->execute();
Можете също така да опитате с различни типове подсказки от PARAM_INT, но дори и да работи, съветвам ви да промените на TINYINT.