我在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转换为字符串?
答案 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)