2016-03-12 17:08:44 4919次浏览 0条回答 1 悬赏 100 金钱

我用ContentAttr::findOne(["content_id"=>$model->id]);来获得一行记录。

结果报出以下错误:

PDOStatement::execute(): Unknown type 245 sent by the server. Please send a report to the developers
The SQL being executed was: SELECT * FROM `content_attr` WHERE `content_id`='1'

数据库是MySQL5.7.11,数据库的建表语句是:

CREATE TABLE `content_attr` (
  `content_id` int(10) unsigned NOT NULL,
  `content` longtext NOT NULL,
  `attr` json NOT NULL,
  UNIQUE KEY `content_id` (`content_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

在mysql控制台直接执行这个SQL语句没有报错

mysql> SELECT * FROM `content_attr` WHERE `content_id`='1'\G;
*************************** 1. row ***************************
content_id: 1
   content: <p>下次</p>
      attr: {"content_attr": "{\"bt\":\"\\u53d1\",\"btx\":\"\\u8bdd\"}", "attr_data_model": [{"id": "1", "name": "bt", "type": "1", "label": "标题", "rules": "required", "value": "发", "created_at": "1457175722", "updated_at": "1457175722"}, {"id": "2", "name": "btx", "type": "1", "label": "标题1", "rules": "required", "value": "话", "created_at": "1457175722", "updated_at": "1457175722"}]}

我专门写了个测试

如果仅仅select content_id那么就没问题

如果select attr 就直接报错了

说明是PHP在处理MySQL JSON列时出的问题

怎么解决呢?

==============================================================

已经解决了,猜测原因应该是PHP不能直接处理JSON列,用CAST(attr as CHAR)转了一下就可以了

另外 据说是PHP升级到5.6.11以后就好了,我还没有,下载了5.6.19,还没部署

==============================================================

    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
kissgxd
总监

kissgxd

注册时间:2015-06-09
最后登录:2019-05-07
在线时长:26小时5分
  • 粉丝3
  • 金钱3810
  • 威望30
  • 积分4370

热门问题