【发布时间】:2021-02-28 14:56:35
【问题描述】:
我在安装新的 MariaDB 10.5.8 时遇到问题。 STRICT_TRANS_TABLES 已设置,当我尝试使用 $sql 时:
'INSERT INTO test (flag) VALUES (?)'
(其中flag 定义为tinyint(1)),var_dump($params) 显示为:
array(1) {
[0]=>
bool(false)
}
我收到这条消息:
Incorrect integer value: '' for column `mydb`.`test`.`flag` at row 1
如果我这样做:
'INSERT INTO test (flag) VALUES (false)'
没有参数,它按预期工作。
这是我连接数据库的方式:
$this->PDO = new PDO('mysql:host=' . DB_SERVER . ';dbname=' . DB_NAME . ';charset=utf8mb4', DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_STRINGIFY_FETCHES => false,
]);
$this->PDO->query("SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'");
这就是我将查询/参数发送到 MariaDB 的方式:
$stmt = self::$_instance->PDO->prepare($sql);
$stmt->execute($params);
如果我尝试插入 true 而不是 false,一切正常。 true 正在转换为 1,false 正在转换为 ''。我做错了什么?
【问题讨论】: