Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO MySQL:布尔值在准备好的语句绑定上转换为1或空字符串_Php_Mysql_Sql_Pdo_Mysql Json - Fatal编程技术网

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

Php PDO MySQL:布尔值在准备好的语句绑定上转换为1或空字符串,php,mysql,sql,pdo,mysql-json,Php,Mysql,Sql,Pdo,Mysql Json,我试图在JSON类型的列中插入一些布尔值 $taskSql = "INSERT INTO Tasks (data, taskListId) VALUES (JSON_OBJECT('title', :title, 'done', :done), :taskListId)"; $taskStatement = $connection->prepare($taskSql); $taskStatement->execute([":title" => $task->title,

我试图在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


编辑:看起来有一个,仍然没有解决。

我结束了将插入行更改为

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

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

调用bind时,
$task->done
的实际值是“true”还是“false”。。。你用的是
PDO::PDO_PARAM_BOOL
?@HamzaAbdaoui他们是真正的布尔人,我已经确定了。@NigelRen是的,我是。我有这个想法,试着把
$task->done
改成这样的字符串:
$newDone=($task->done)?”真’:‘假’