专栏首页西枫里博客thinkPHP升级到5.0.13导致update更新出错的问题

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

话题还得从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的接收的数组里面嵌套了一个一维数组,看起来像是一个二维数组,但不是一个真正的二维数组。复现当时的情况如下:

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限定单一字段,但是我忘了将数据从这个只有一条数据的数组中提出。造成了这里嵌套了一个一维数组。更新后的待写入字段

array(12){
["aaa"]=>string(10) "aaa"
["bbb"]=>string(10) "bbb"
["xxx"] => string(46) "yyy"
["ccc"]=>string(10) "ccc"
}

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ASP防止XSS跨站脚本攻击

    我的ASP的程序,一直以来只注重SQL注入攻击的防御,一直认为XSS跨站没有SQL注入那么严重,直到最近被攻破了,不得已,必须的修补。如何防御XSS跨站脚本攻击...

    世纪访客
  • 最简单的基于jquery的ajax请求教程

    上一次文章提到ajax异步请求的简单教程。那是基于原生JavaScript实现的。本次是基于jquery的ajax异步请求教程。

    世纪访客
  • 去除html标签并截取字符串函数

    主要为了处理编...

    世纪访客
  • 【C语言笔记】数组与指针不等价

    数组遍历方式一:使用指针遍历数组元素,p++等价于(p++),即指针指向的地址每次后移一个单位,然后再取地址上的值。这里的一个单位是sizeof(int)个字节...

    正念君
  • 5.1 一维数组

    闫小林
  • 数组Array

    https://docs.microsoft.com/zh-cn/office/vba/language/glossary/vbe-glossary#array

    xyj
  • 用numpy如何创建一个空数组?

    最近在用numpy过程中,总会不自觉的需要创建空数组,虽然这并不是一个明智的做法,但终究是可能存在这种需求的。本文简单记录3种用numpy生成空数组的方式。

    luanhz
  • 8.3 通过指针引用数组

    1、指针变量既可以指向变量,也可以指向数组元素。所谓数组元素的指针就是数组元素的地址。

    闫小林
  • SystemVerilog教程之数据类型1

      我们知道,Verilog中,有两种基本的数据类型:reg和wire,reg在always、initial、task和funciton中被赋值,wire使用a...

    猫叔Rex
  • MQL5从入门到精通【第二章】变量与数据类型(二)

    我们讲了变量和数据类型,都是单个的变量,及其值。那么这个数组,是用来装载多个数据的一种结构。你可以把数组想象为一个数字列表,每个数字对应不同的值。可以从头按照数...

    程序员小助手

扫码关注云+社区

领取腾讯云代金券