前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >thinkPHP升级到5.0.13导致update更新出错的问题

thinkPHP升级到5.0.13导致update更新出错的问题

作者头像
世纪访客
发布2018-08-02 15:35:19
1.2K0
发布2018-08-02 15:35:19
举报
文章被收录于专栏:西枫里博客西枫里博客
...
...

话题还得从tinkPHP群消息说起,双十二那天,群内通知官方发布了5.0.13版本。刚好那几天在折腾redis缓存。官方文档中说5.0.13是一个集合诸多改进的版本,redis缓存驱动使用serialize替换了原先的json序列化。而博主的程序初始版本还是在5.0.10的基础上搭建了,后面在博客发布的时候更新到了5.0.11。想着官方已经发布了5.0.13,已经跨版了,就折腾起来。

折腾之前看了下官方升级指导,发现从5.0.11可以无缝升级的5.0.12,并且5.0.12可以无缝升级到5.0.13.所以也就信心满满的去折腾升级了,拷贝了下think核心中的success和error的跳转模版、paginate的分页类(被我修改过)。其它文件直接覆盖了。更新好以后就去点了几个页面,完全正常,添加了条测试信息也无误,也就直接更新到服务器上去了。

更新完成后,当我去写博客的更新日志的时候,问题来了,直接报错了个致命错误。

[8] ErrorException in Builder.php line 114  未定义数组下标: 0  

未定义数组下标,当时没反应过来是我的待写入数据的问题,因为之前一直是正常的。也就没多想,就去看了下builder.php的源码,114行的代码就是官方更新日志里面关于inc和dec关键字修复的问题。和5.0.12版本对比发现也只是多了个switch判断。似乎问题也不在这里,这下就陷入了僵局。

因为是数组下标的问题。问题最大的可能还是出在我的应用层面上,和框架底层关系不大。没办法,只好从头检查了一遍应用逻辑,从前端表单开始,到后台接收。尝试静态写入数据,发现一切正常,只好打印了下input接收的数据。粗看之下没问题,等等,怎么成了个input的接收的数组里面嵌套了一个一维数组,看起来像是一个二维数组,但不是一个真正的二维数组。复现当时的情况如下:

代码语言:javascript
复制
array(12){
["aaa"]=>string(10) "aaa"
["bbb"]=>string(10) "bbb"
["xxx"] => array(1) {
    ["xxx"] => string(46) "yyy"
  }
 ["ccc"]=>string(10) "ccc"
}

看复现的这个数组,正常待写入的数据应该是一个一维数组,键名为字段名,键值为数据。这里xxx键名对应的键值又是一个同名的数组。至此终于发现这个问题,因为待写入的值又是一个一维数组,所以就无法找到下标了。现在这个问题就简单了,xxx是我从数据库读出来的数据,find以后是一个一维数组,虽然使用了field限定单一字段,但是我忘了将数据从这个只有一条数据的数组中提出。造成了这里嵌套了一个一维数组。更新后的待写入字段

代码语言:javascript
复制
array(12){
["aaa"]=>string(10) "aaa"
["bbb"]=>string(10) "bbb"
["xxx"] => string(46) "yyy"
["ccc"]=>string(10) "ccc"
}

这样就一切正常了,至此问题解决,最后忠告,逻辑层面还是需要仔细再仔细。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档