ThinkPHP怪现象:数据表新增字段后开发模式可更新运行模式无法更新
来源:互联网 发布:itunes发生网络错误 编辑:程序博客网 时间:2024/06/05 20:12
一、情况说明
一个已经发布的程序中,数据库原有表article,字段原有id、content、title三个字段,原程序可以正常运行,通过大D方法可以正常的更新数据库。
现在要对这个程序进行更新,数据库表article现在增加字段media,在开发阶段(Debug=true)时程序可以正常运行后,将开发模式关闭(Debug=false),然后运行程序,发现media字段无法更新,想想可能是缓存的问题,于是将Runtime目录给删除掉,再次运行,OK!media字段可以更新了,于是将程序打包通过FTP发布到服务器后解压。
结果程序又无法更新了,想想也许是缓存的问题,好吧,将Runtime目录删除掉,再试,还是不行。好吧,在入口文件index.php中将DEBUG又重新设置为true,并覆盖到服务器上,测试,工作正常。
到底发生了什么问题呢?
二、发觉问题
将服务器上的入口文件中的DEBUG还是设置为FALSE,然后将页面信息PAGE_TRACE设置为TRUE,再次测试,发现并没有运行时的错误。
于是,我只好将数据库对象通过dump()方法打印出来,同时将更新到数据库中的数据集也通过dump()方法打印出来。这时候发现数据集中又media字段的信息,而数据库对象中的字段却没有media字段的信息。
我再次将DEBUG设置为TRUE打开开发模式,再次dump()数据库操作对象,这时数据库操作对象中居然有了media字段。于是乎只好确认是缓存问题了。
遂通过FTP软件将Runtime目录再次删除掉,这时候才注意到了一个奇怪的现象,Runtime目录删除不了,其中Rumtime目录下还存在着Data/_fields目录,多次删除都无法删除,只有一点可以说明,这个文件夹下还有文件。
也就是说,缓存没有清理干净!
三、解决问题
这里先说明一下,我服务器系统是Linux的,我自己电脑是Mac的,用的FTP软件是FileZilla。
既然文件没有清理干净又看不到,那只有可能是隐藏起来的了,于是乎在FileZilla的菜单中的Server菜单下找到了Force Showing hidden files,这样就可以显示所有隐藏文件了。
这下再看Runtime\Data\_fields\目录下就看到了这样几个隐藏文件:
奶奶的,原来所有数据表的结构信息都已经被缓存起来了的,而且这个缓存文件是在数据表被创建时创建的,而后来更新表字段后,这个数据表结构的缓存文件并没有被更新。
这下算是解决了,删除掉这几个表,将DEBUG设置为FALSE后,重新打开这个网站,OK,这几个文件又重新被建立了,而这时建立的是根据新表来建立的,这样,问题就得到了解决!
- ThinkPHP怪现象:数据表新增字段后开发模式可更新运行模式无法更新
- 更新数据表中的字段
- MVPHelper更新日志 --- 新增常规分包模式
- CEdit设置背景模式后出现重影,删除不更新的现象
- thinkphp 一个字段更新方法
- thinkphp更新单个字段值
- thinkphp 批量更新数据字段
- THINKPHP使用自动表单变量更新数据表所存在的字段不全问题
- thinkphp新增字段无法插入数据库
- Yii学习笔记(十):修改数据表中的字段后如何更新model中的字段
- 【EF】数据表全部字段更新与部分字段更新
- 《无尽之剑2》重大更新 新增ClashMob社交模式
- Win10更新后VC++6.0无法正常运行(0xc0000142)
- DedeCMS内容模型新增图片字段后,更新栏目页没反应的解决方法
- DedeCMS内容模型新增图片字段后,更新栏目页没反应的解决方法
- 新增数据表或字段
- thinkphp setField 更新某字段的值
- VFP中连编后运行提示数据表是临时表无法更新
- UNIX环境编程基本函数——标准IO
- Double precision
- 科大讯飞语音合成android studio 21001错误
- 151. Reverse Words in a String 翻转字符串中的单词
- upnp 端口映射
- ThinkPHP怪现象:数据表新增字段后开发模式可更新运行模式无法更新
- 排序算法研究
- IOS 在iPhone上实现简单Http服务
- 设计模式之装饰器
- C#控制台 输出hello world之 用派生类的方法屏蔽基类的方法输出
- 树莓派做web服务器
- Java 设计模式之建造者模式的详解(创建模式)
- FANUC系统-斗笠式加工中心 加工程序解析
- java面向对象3