代码之家  ›  专栏  ›  技术社区  ›  Philippe

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

  •  2
  • Philippe  · 技术社区  · 7 年前

    $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 year old bug report

    1 回复  |  直到 7 年前
        1
  •  0
  •   Philippe    7 年前

    我将插入行更改为

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

    不是一个解决方案,而是一个变通方法。