Я пытаюсь вставить некоторые логические значения в столбцы типа 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 превратить их в TRUE
или же FALSE
в SQL-выражении, которое затем преобразовало бы их в правильные JSON-логические значения.
РЕДАКТИРОВАТЬ:
Я сейчас попробовал использовать bindParam
а также bindValue
вместо аргумента execute
, Это не решает проблему, поскольку PDO по-прежнему преобразует логические значения в 0
или же 1
,
РЕДАКТИРОВАТЬ: Похоже, что есть 11-летний отчет об ошибках, это до сих пор не решено.
Я пытаюсь изменить строку вставки на
INSERT INTO Tasks (data, taskListId) VALUES (JSON_OBJECT('title', :title, 'done', :done = TRUE || :done = '1'), :taskListId);
Не решение, а обходной путь.
Других решений пока нет …