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

问题描述 投票:0回答:2

我正在尝试将一些布尔值插入到 JSON 类型列中。

$taskSql = "INSERT INTO Tasks (data, taskListId) VALUES (JSON_OBJECT('title', :title, 'done', :done), :taskListId)";
$taskStatement = $connection->prepare($taskSql);
$taskStatement->execute([":title" => $task->title, ":done" => $task->done, ":taskListId" => $id]);

这会导致执行以下 SQL。

-- $task->done is false
INSERT INTO Tasks (data, taskListId) VALUES (JSON_OBJECT('title', 'New Task', 'done', ''), '12')
-- $task->done is true
INSERT INTO Tasks (data, taskListId) VALUES (JSON_OBJECT('title', 'New Task', 'done', '1'), '12')

有没有办法让 PDO 在 SQL 语句中将它们转换为

TRUE
FALSE
,然后将它们转换为正确的 JSON 布尔值。

编辑:

我现在尝试使用

bindParam
bindValue
而不是
execute
的参数。这些并不能解决问题,因为 PDO 仍然将布尔值转换为
0
1

编辑:看起来有一个 11 年前的错误报告,但仍未得到解决。

php mysql sql pdo mysql-json
2个回答
0
投票

我最终将插入行更改为

INSERT INTO Tasks (data, taskListId) VALUES (JSON_OBJECT('title', :title, 'done', :done = TRUE || :done = '1'), :taskListId);

不是解决方案,而是解决方法。


0
投票

当我在数据库中关闭 @@mode STRICT_TRANS_TABLES 时,这些值(1 或空字符串)起作用。

© www.soinside.com 2019 - 2024. All rights reserved.