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

时间:2015-10-21 07:52:42

标签: 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 * from table_has_json_datatype')#1 {main}

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

感谢。

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

{{1}}

4 个答案:

答案 0 :(得分:13)

向PHP开发人员报告了一个Bug #70384

开发者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的角度来看这很好: 例如:

data test;
   array myVals {3,4} myVal1_1 - myVal1_4
                      myVal2_1 - myVal2_4
                      myVal3_1 - myVal3_4;
   do i = 1 to 3;
      do j = 1 to 4;
         myVals{i,j} = j - i + 3;
      end;
   end;

   array newArray {*} myVals{1}; *All of these throw errors;
   array newArray {*} myVals[1];
   array newArray {*} myVals(1);
   array newArray {*} myVals{1,};

   len2ndDim = dim2(myVals); *this produces a column with value 4;

   array newArray {len2ndDim}; *this throws error for "len2ndDim" not being an integer constant or *;
run;

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

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

答案 1 :(得分:1)

我在PHP 5.5中遇到了同样的问题 - 决定更新到PHP 5.6,但问题仍然存在。转换为CHAR会有所帮助,但这不是一个好的解决方案。

我的PHP配置是使用libmysqlclient,当我将其更改为mysqlnd(MySQL本机驱动程序)时,它解决了这个问题。

所以我建议你这样做。

您可以在此处阅读有关PHP MySQL驱动程序的信息: http://php.net/manual/en/mysqlinfo.library.choosing.php

我使用apt-get:

在Ubuntu服务器上安装了mysqlnd驱动程序

apt-get install php5-mysqlnd

答案 2 :(得分:1)

作为一个小附录。将列强制转换为类似于char的效果,可以使用双引号返回值。你可以使用trim来摆脱它们:

select *, TRIM(BOTH '"' FROM CAST(json_col as CHAR)) as json_col from table_with_json_type

答案 3 :(得分:0)

如果您使用laravel或lumen,在此配置config / database.php

'options' => [PDO::ATTR_EMULATE_PREPARES => true]

否则可能会尝试安装myslnd

apt-get install php7.0-mysqlnd

引用以下内容:https://laracasts.com/discuss/channels/eloquent/json-column-problem-with-mysql57-and-laravel52#reply-191316