Używam pola bitowego (1) do przechowywania wartości logicznych i wpisywania do tabeli za pomocą instrukcji przygotowanych przez PDO.PDOstatement (MySQL): wstawienie wartości 0 do bitu (1) powoduje wyświetlenie 1 w tabeli
Jest to tabela testu:
CREATE TABLE IF NOT EXISTS `test` (
`SomeText` varchar(255) NOT NULL,
`TestBool` bit(1) NOT NULL DEFAULT b'0'
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
Jest to kod testowy:
$pdo = new PDO("connection string etc") ;
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (?,?)') ;
$statement->execute(array("TEST",0)) ;
Uruchomienie tego kodu daje mi wiersz o wartości 1 pod TestBool. I to samo przy użyciu bindValue() i bindParm(). Próbowałem również nazwanych placeholders (zamiast?) Z tym samym wynikiem.
Potem próbowałem:
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES ("TEST",0)') ;
$statement->execute() ;
działał poprawnie (TestBool ma wartość 0). Wdrażanie SQL bezpośrednio do MySQL również działa.
Pamiętaj, że wstawianie 1 zawsze działa.
Dlaczego więc placeholders nie wstawią wartości 0? (i jak faktycznie to zrobić?)
Już używasz PDO, to dobrze. Dlaczego nie skorzystać z wymienionej funkcji zastępczej dla ChNP? Zobacz samouczek: http://www.phpeveryday.com/articles/PDO-Positional-and-Named-Placeholders- P551.html –
Na potrzeby tego pytania spróbowałem i nie ma to znaczenia. W przypadku ogólnego zapytania czy jest jakaś korzyść z używania go, a nie wygody? (Jest to część DAL, więc i tak zostanie wygenerowane) – Peter
Tak, nie musisz pamiętać kolejności zmiennych. Zwiększasz abstrakcję kodu. –