我正在尝试将假布尔值存储到数组中,以将其作为PDO预处理语句中的值传递:
$a = Array('bool' => '0');
if($a['bool'] === '1') {
$a['bool'] = true;
}
else {
$a['bool'] = false;
}
print_r($a);
结果是:
Array
(
[bool] =>
)
我希望:
Array
(
[bool] => 0
)
因为如果我存储一个真正的布尔值,print_r函数会打印true
作为'bool'的值。
将$ ['bool']设为空不会向我的 bit
字段发送false值并使我的查询无效。
该值以:
传递$sth->execute( $a );
我该如何解决这个问题?
对于谁说“使用1和0”,嗯,PDO不接受整数1和0的布尔值,它需要真正的布尔值。
答案 0 :(得分:4)
您可以使用1或0代替true或false。另外,下面是另一种方法:
if($a['bool'] === '1') {
$a['bool'] = intval(true);
} else {
$a['bool'] = intval(false);
}
答案 1 :(得分:1)
使用整数0或1表示false或true。它将像布尔一样工作。如果使用整数作为布尔值,则不应使用===
运算符
你可以像这样简单地测试:
if($intVar) {
//do something it is true
}
else{
//do something it is false
}
只需在数组中将0或1作为对象:
$a = Array('bool' => 0);
然后像这样使用它:
$sth->execute( $a );
它没有经过测试但应该起作用:)
//test for false
$a = Array('bool' => 0);
if($a['bool']){
echo "It is true";
}
else {
echo "It is false \n";
}
print_r($a);
//second test for true
$a = Array('bool' => 1);
if($a['bool']){
echo "It is true";
}
else {
echo "It is false \n";
}
print_r($a);
输出:
It is false
Array
(
[bool] => 0
)
It is trueArray
(
[bool] => 1
)
答案 2 :(得分:1)
它存储布尔值值。因此,当您获得该值时,您应该期望一个布尔值。如果您使用var_dump($a)
而不是print_r,您会看到它完全存储为
array(1) {
'bool' =>
bool(false)
}