Sto usando un campo bit (1) per memorizzare valori booleani e scrivere nella tabella utilizzando istruzioni preparate PDO.PDOstatement (MySQL): inserendo il valore 0 in un campo bit (1) risulta 1 scritto nella tabella
Questa è la tabella di prova:
CREATE TABLE IF NOT EXISTS `test` (
`SomeText` varchar(255) NOT NULL,
`TestBool` bit(1) NOT NULL DEFAULT b'0'
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
Questo è il codice di prova:
$pdo = new PDO("connection string etc") ;
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (?,?)') ;
$statement->execute(array("TEST",0)) ;
Esecuzione di codice che mi dà una riga con il valore 1 in TestBool. E la stessa cosa con bindValue() e bindParm(). Ho anche provato i segnaposti denominati (anziché?) Con lo stesso risultato.
Poi ho provato:
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES ("TEST",0)') ;
$statement->execute() ;
che ha funzionato correttamente (TestBool ha valore 0). Funziona anche il punch in SQL direttamente in MySQL.
Si noti che l'inserimento di 1 funziona sempre.
Quindi perché i segnaposto non inseriscono il valore 0? (e come faccio a farlo?)
Si sta già utilizzando PDO, va bene. Perché non sfruttare la caratteristica dei segnaposti denominati di PDO? Vedi un tutorial: http://www.phpeveryday.com/articles/PDO-Positional-and-Named-Placeholders-P551.html –
Ai fini di questa domanda, l'ho provato e non fa differenza. Per un'inchiesta generale, c'è qualche vantaggio nell'usarlo diverso dalla convenienza? (Questo fa parte di un DAL quindi verrà generato comunque) – Peter
Sì, non è necessario ricordare l'ordine delle variabili. Aumenta l'astrazione del codice. –