PDO-MySQL:布尔值在准备好的语句绑定上转换为 1 或空字符串
PDO-MySQL: Boolean values get converted to 1 or empty string on prepared statement binding
我正在尝试将一些布尔值插入到 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-boolean -值。
编辑:
我现在尝试使用 bindParam
和 bindValue
而不是 execute
的参数。这些不能解决问题,因为 PDO 仍然将布尔值转换为 0
或 1
.
编辑:看起来有一个 11 year old bug report,仍然没有得到解决。
我最终将插入行更改为
INSERT INTO Tasks (data, taskListId) VALUES (JSON_OBJECT('title', :title, 'done', :done = TRUE || :done = '1'), :taskListId);
不是解决方案,而是解决方法。
我正在尝试将一些布尔值插入到 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-boolean -值。
编辑:
我现在尝试使用 bindParam
和 bindValue
而不是 execute
的参数。这些不能解决问题,因为 PDO 仍然将布尔值转换为 0
或 1
.
编辑:看起来有一个 11 year old bug report,仍然没有得到解决。
我最终将插入行更改为
INSERT INTO Tasks (data, taskListId) VALUES (JSON_OBJECT('title', :title, 'done', :done = TRUE || :done = '1'), :taskListId);
不是解决方案,而是解决方法。