PDOstatement (MySQL):将值 0 插入到 bit(1) 字段中会导致 1 写入表中
2022-08-30 16:36:00
我使用 bit(1) 字段来存储布尔值,并使用 PDO 预准备语句写入表中。
这是测试表:
CREATE TABLE IF NOT EXISTS `test` (
`SomeText` varchar(255) NOT NULL,
`TestBool` bit(1) NOT NULL DEFAULT b'0'
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
这是测试代码:
$pdo = new PDO("connection string etc") ;
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (?,?)') ;
$statement->execute(array("TEST",0)) ;
运行该代码会在 TestBool 下为我提供一行,其值为 1。使用 bindValue() 和 bindParm() 也是同样的事情。我还尝试了命名占位符(而不是?),结果相同。
然后我尝试了:
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES ("TEST",0)') ;
$statement->execute() ;
它工作正常(TestBool的值为0)。将SQL直接打入MySQL也可以。
请注意,插入 1 始终有效。
那么,为什么占位符无法插入值 0 呢?(我该如何实际做到这一点?