【发布时间】:2012-05-19 09:47:51
【问题描述】:
我使用 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 呢? (实际上我该怎么做?)
【问题讨论】:
-
您已经在使用 PDO,这很好。为什么不利用 PDO 的命名占位符功能呢?看教程:phpeveryday.com/articles/…
-
出于这个问题的目的,我试过了,没有任何区别。对于一般查询,使用它除了方便之外还有什么好处吗? (这是 DAL 的一部分,因此无论如何都会生成)
-
是的,您不需要记住变量的顺序。您增加了代码抽象。
标签: php mysql pdo prepared-statement