PDOstatement (MySQL): wstawienie wartości 0 do pola bitowego (1) powoduje, że 1 jest zapisana w tabeli

Używam pola bitowego (1) do przechowywania wartości boolowskich i zapisywania do tabeli za pomocą instrukcji przygotowanych do PDO.

To jest tabela testowa:

<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>

To jest kod testowy:

<code>$pdo = new PDO("connection string etc") ;
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (?,?)') ;
$statement->execute(array("TEST",0)) ;
</code>

Uruchomienie tego kodu daje mi wiersz o wartości 1 w TestBool. To samo dotyczy bindValue () i bindParm (). Wypróbowałem także nazwane symbole zastępcze (zamiast?) Z tym samym wynikiem.

Potem spróbowałem:

<code>$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES ("TEST",0)') ;
$statement->execute() ;
</code>

Który działał poprawnie (TestBool ma wartość 0). Działa również wykrawanie SQL bezpośrednio w MySQL.

Pamiętaj, że wstawianie 1 zawsze działa.

Dlaczego więc symbole zastępcze nie mogą wstawić wartości 0? (i jak mam to zrobić?)

questionAnswers(4)

yourAnswerToTheQuestion