表上的PHP PDO查询错误有json数据类型(MySQL 5.7.8-rc)

Qua*_*Ng. 7 php mysql pdo types mysql-json

我在mysql 5.7上尝试新的json数据类型.当我使用本机php mysql查询时,它工作正常,但当我使用PDO查询数据时,它显示此错误:

错误:异常'PDOException',消息'SQLSTATE [HY000]:/some_folder/pdo.php:12中的常规错误:2036'堆栈跟踪:#0 /some_folder/pdo.php(12):PDO-> query('select*来自table_has_json_datatype')#1 {main}

你们知道如何解决这个问题吗?

谢谢.

使用我的简单测试代码更新:

<?php

try{
    $db = new PDO('mysql:host=some.host;dbname=somedb;charset=utf8', 'user', 'pwd');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch(PDOException  $e){
    echo "Error1: ".$e;
}

try{
    $query = $db->query("select * from table_with_json_type");

}catch(PDOException $e){
    echo "Error2: ".$e;
}
?>
Run Code Online (Sandbox Code Playgroud)

Leo*_*lho 13

这是向PHP开发人员#70384报告的Bug

开发人员andrey@php.net刚发布:

已经提交了此错误的修复程序.

每三个小时打包一次来源的快照; 此更改将在下一个快照中.您可以访问http://snaps.php.net/获取快照 .

对于Windows:

http://windows.php.net/snapshots/ 感谢您提供该报告,并帮助我们改进PHP.

在PHP-5.6.19,PHP-7.0和master(PHP-7.1)中修复

感谢您的报告

因此,PHP 5.6.19+将支持JSON数据类型.对于其他版本,上面提供了一种解决方法.

此解决方法将具有CAST功能的JSON字段修改为CHAR,从PHP的角度来看这很好:例如:

select *, CAST(json_col as CHAR) as json_col from table_with_json_type
Run Code Online (Sandbox Code Playgroud)

在所有情况下,它对我都有用.

要完全兼容,您必须使用PHP-5.6.19 +