postgres update query在设置为true但不为false时更新boolean列

时间:2018-02-13 15:30:56

标签: php postgresql undefined-behavior

我有这个问题:

pg_prepare($conn, 'set_ui_advanced', 'update system.boxes set ui_advanced=$1 where id=$2');

$update_cmd_exec = pg_execute($conn, 'set_ui_advanced', array($ui_advanced, $system));

该列是布尔类型。

每当我从前端得到我的变量时:

$ui_advanced = boolval(trim($_POST['ui_advanced']));

我传递0和1然后返回变量并分别得到false,true。所以,我已经验证我的变量已经正确完成了。但是,当传递给查询时,我的列只会在变量设置为1而不是0时更新,即使我仍然变为true和false。

我只是使用:

解决了这个问题
intval($variable) 
相反,让postgres处理它,但为什么不能做真假工作呢?

我看了HERE来验证postgres是否允许true和false,这就是php表示true,false的方式。

1 个答案:

答案 0 :(得分:0)

我运行了这个简单的脚本:

$var = boolval('1');
echo("True: ");
echo($var);
echo(" False: ");               
$var = boolval(0);
echo($var);

由此产生的结果是:

True: 1 False:

然后我查了解为什么打印False没有打印任何东西而且我引出了这个问题:

Why doesn't PHP print TRUE/FALSE?

总结这个问题的答案,Php Documentation字符串表示当打印true和false时,上面的结果是预期的,并表示为:

  

布尔值TRUE值转换为字符串" 1"。布尔值FALSE转换为"" (空字符串)。这允许在布尔值和字符串值之间来回转换。