php - MySQL: Selecting boolean value from JSON field -
i'm using mysql 5.7.19
i'm trying retrieve class looks follows
class task {     public $title;     public $done; } the title , done properties saved in json column.
the code use retrieve looks follows:
    $taskssql = <<<'eot'     select  json_unquote(json_extract(data, '$.title')) title,             json_extract(data, '$.done') done                 tasks tasklistid = ?; eot;     $tasksstatement = $connection->prepare($taskssql);     $tasksstatement->execute([$id]);     $tasksstatement->setfetchmode(pdo::fetch_class, "task");     $tasklist->tasks = $tasksstatement->fetchall(pdo::fetch_class, "task"); it fills out fields, done property gets set string values "true" or "false" instead of boolean value.
i think pdo not recognizing boolean value being returned, , assuming string. has nothing json being used. change in query
json_extract(data, '$.done') done into
json_extract(data, '$.done') = true done to change integer 0/1 instead.
or change php code parse returned value boolean. example adding constructor tasks object:
class task {     public $title; // string     public $done; // bool     // ...      public function __construct() {         $this->done = $done == 'true';     } } or let pdo use anonymous function conversion:
$tasklist->tasks = $tasksstatement->fetchall(pdo::fetch_func, function($title, $done) { $task = new task(); $task->title = $title; $task->done = $done == 'true'; return $task;}); 
Comments
Post a Comment