无法在布尔类型中插入false值 - 将其转换为空字符串

时间:2015-10-26 06:52:18

标签: php mysql pdo

我在MySql中的这一栏:

  male      BOOLEAN  COMMENT "true for male",

我使用此查询在Drupal中使用PDO包装器进行插入:

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

我收到此错误:

  

WD php:PDOException:SQLSTATE [HY000]:常规错误:1366不正确   ^ [[31; 40m ^ [[1m [error] ^ [[0m整数值:''专栏'男性'在一排   1:INSERT INTO .....

但如果我用'male'=>true替换,则查询有效。令人惊讶的是,如果我将0(int)false替换为false,那么它也会有效!

这意味着将错误转换为'' (在此上下文中为空字符串)。

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

我在这里得到了相关问题:In PHP why is true cast 1 and false cast an empty string?但它没有回答为什么PHP将false转换为字符串?

1 个答案:

答案 0 :(得分:0)

这是一个错误(PHP PDO或MySQL)。布尔值FALSE应转换为int 0,但应转换为空字符串。在以下问题中,请参阅指向MySql中非常老的错误报告的链接:

重复项: PDO-MySQL: Boolean values get converted to 1 or empty string on prepared statement binding

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