我在这里吓坏了,无法弄清楚出了什么问题。我是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
正如你所看到的,发布的是一个整数 - 所以总是如此,这是不行的。如果我将它声明为布尔值,那为什么呢?
使用:
WAMP SERVER PHP版本:5.3.9 Mysql:5.5.20
非常感谢你的帮助..
答案 0 :(得分:2)
MySQL实际上没有布尔数据类型,BOOLEAN关键字只是TINYINT(1)的别名。
你必须工作它有一个数字,其中1 =真,0 =假。
查看MySQL Data Types
答案 1 :(得分:0)
对于MySql,我将数据类型用作TINYINT(1)并将数据类型设置为PARAM_INT,
我创建了一个小方法:
public static function castBoolMysql($value):int
{
if($value !== 1 && $value !== 0 && !is_bool($value))
{
return false;//Incorrect value for bool
}
return intval($value);
}
$pdostmt->bindValue(':published', Test::castBoolMysql($published), PDO::PARAM_INT);