php - MySQL:从 JSON 字段中选择 bool 值

标签 php mysql json pdo mysql-json

我正在使用 MySQL 5.7.19

我正在尝试检索如下所示的类

class Task
{
    public $title;
    public $done;
}

titledone 属性保存在 JSON 列中。

我用来检索的代码如下所示:

    $tasksSql = <<<'EOT'
    SELECT  JSON_UNQUOTE(JSON_EXTRACT(data, '$.title')) AS title,
            JSON_EXTRACT(data, '$.done') AS done
                FROM Tasks WHERE TaskListId = ?;
EOT;
    $tasksStatement = $connection->prepare($tasksSql);
    $tasksStatement->execute([$id]);
    $tasksStatement->setFetchMode(PDO::FETCH_CLASS, "Task");
    $taskList->tasks = $tasksStatement->fetchAll(PDO::FETCH_CLASS, "Task");

它填写了所有字段,但是 done 属性设置了字符串值“true”或“false”,而不是 bool 值。

最佳答案

我认为 PDO 没有识别返回的 bool 值,它只是假设它只是字符串。这与使用的 JSON 无关。您可以更改查询

JSON_EXTRACT(data, '$.done') AS done

进入

JSON_EXTRACT(data, '$.done') = true AS done

改为将其更改为整数 0/1。

或者更改您的 PHP 代码以将返回值解析为 bool 值。例如,通过为 tasks 对象添加构造函数:

class Task {
    public $title; // string
    public $done; // bool
    // ...

    public function __construct() {
        $this->done = $done == 'true';
    }
}

或者甚至让 PDO 使用匿名函数进行转换:

$taskList->tasks = $tasksStatement->fetchAll(PDO::FETCH_FUNC, function($title, $done) { $task = new Task(); $task->title = $title; $task->done = $done == 'true'; return $task;});

关于php - MySQL:从 JSON 字段中选择 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45304713/

相关文章:

php - 统计MySQL查询中的多个结果

php - 使用php和mysql计算两点之间的距离

mysql - 如果在一个查询中选择行 == '0',如何插入?

php - JSON 和 CURL 问题

javascript - AJAX、JSON、PHP 联系表单、event.preventDefault 不起作用且数据未发送到电子邮件

php - 10分钟后删除所有记录

php - 在 Windows 上运行的 PHP5 中获取 $_SERVER ["REQUEST_URI"]

php - MYSQL 的 BETWEEN 日期的 SQL 查询不包括指定范围?

php - 刷新时生成新的目录字符串

ios - 无法使 Restkit 0.20 + CoreData 工作