无法在布尔类型中插入假值-被强制转换为空字符串



我在MySql中有这个专栏:

  male      BOOLEAN  COMMENT "true for male",

我使用这个查询插入使用PDO包装在Drupal:

$id = db_insert('Person')->fields(array(
         .......      
        'male' => false,
     )
)->execute();

我得到这个错误:

WD php: PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect^[[31;40m^[[1m][错误]^[[0m整数值:"对于列'male'在行1: INSERT INTO .....

但是如果我用'male'=>true替换,查询工作。令人惊讶的是,如果我用false代替0(int)false,那么它也可以工作!

表示在此上下文中,false被转换为"(空字符串)"。

我想知道为什么它在这里被转换为字符串。

我有相关的问题在这里:在PHP中,为什么是真cast 1和假cast一个空字符串?但它没有回答为什么PHP将false转换为string?

这是一个错误(PHP PDO或MySQL)。布尔值FALSE应该被转换为int 0,但却被转换为空字符串。在下面的问题中可以看到MySql中非常旧的bug报告的链接:

复制:PDO-MySQL:布尔值在准备好的语句绑定上转换为1或空字符串

$values = array_map(function ($v) { return is_bool($v) ? (int) $v : $v; }, $values)

最新更新