【发布时间】:2012-04-01 23:24:18
【问题描述】:
我吓坏了,不知道出了什么问题。我对 PDO 很陌生,但是除了作为字符串发送的布尔值之外,我的代码中的所有内容都可以正常工作。
我的代码(简化):
$sql = 'SELECT * FROM pages WHERE clean_url_slo = :clean_url_slo AND published = :published LIMIT 1';
$clean_url_slo = 'home';
$published = true;
然后我准备东西并像这样(简化)执行它:
$stmt = $db->prepare($sql);
$stmt->bindValue(':clean_url_slo',$clean_url_slo,PDO::PARAM_STR);
$stmt->bindValue(':published',$published,PDO::PARAM_BOOL);
$stmt->execute();
然后这是 mysql 的内容(来自 mysql 日志 - mysql 收到的查询):
91 Query SELECT * FROM pages WHERE 1=1 AND clean_url_slo='domov' AND published='1' ORDER BY id desc LIMIT 1
如您所见,published 是一个整数 - 所以总是正确的,这是不对的。如果我将其声明为布尔值,为什么会这样?
使用:
WAMP 服务器 PHP版本:5.3.9 mysql:5.5.20
非常感谢您的帮助..
【问题讨论】:
-
整数 1 即使引用为字符串也是 TRUE,整数 0 即使引用为字符串也是 FALSE。
-
用
SELECT '0'=TRUE;(0),SELECT '0'=FALSE;(1) 测试这个 -
感谢您的回答,我已在数据库中将其设置为 TINYINT(1),但我认为 BOOL 应该是 1 或 0 而不是“1”和“0”。我现在已经测试过了,它确实有效。