ThinkPHP怪现象:数据表新增字段后开发模式可更新运行模式无法更新
2016-07-30 18:15
441 查看
一、情况说明
一个已经发布的程序中,数据库原有表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,这样就可以显示所有隐藏文件了。
![](http://www.xcoder.cn/wp-content/uploads/2014/04/filezilla_force_show_file.png)
FileZilla强制显示隐藏文件
这下再看Runtime\Data\_fields\目录下就看到了这样几个隐藏文件:
![](http://www.xcoder.cn/wp-content/uploads/2014/04/show_hidden_file.png)
FTP中的隐藏文件显示
奶奶的,原来所有数据表的结构信息都已经被缓存起来了的,而且这个缓存文件是在数据表被创建时创建的,而后来更新表字段后,这个数据表结构的缓存文件并没有被更新。
这下算是解决了,删除掉这几个表,将DEBUG设置为FALSE后,重新打开这个网站,OK,这几个文件又重新被建立了,而这时建立的是根据新表来建立的,这样,问题就得到了解决!
原文地址:http://www.xcoder.cn/index.php/archives/1100
相关文章推荐
- ThinkPHP问题收集:模板中使用U方法时无法嵌套大括号,For标签,插入数据,新增的表字段缓存问题
- 开发环境下调试没有问题,发布后运行却提示无法更新数据库 *.MDF,因为数据库是只读的解决方法
- EF更新,数据库值变化,前台页面并不变化,刷新也不变化,重新运行程序则变化----开发中遇到的问题(已解决)
- 【数据平台】Eclipse+MapReduce开发环境(集群运行模式)
- thinkphp5 + postgresql 在插入数据时无法获取新增记录ID
- 新增字段不为空默认值,然后关更新数据
- Android开发RecycleView的适配器(adapter)无法更新集合中数据
- 【SQL Server】sql server更改了数据表的字段/新增数据表的字段 无法保存
- Oracle存储过程游标循环更新新增字段处理线上历史数据问题
- Thinkphp新增字段无法插入到数据库问题
- 在运行程序时报错:"如果在 Code First 模式下使用,则使用 T4 模板为 Database First 和 Model First 开发生成的代码可能无法 正常运行。若要继续使用 Database First 或 Model First,请确保在执行应用程序的 config 文件中指 定 Entity Framework 连接字符串。若要将这些从 Database First 或 Mod
- sql2005数据库,在新增或更新数据时出现超时现象
- thinkphp 在数据库更新(save)的时候,如果字段没有被修改,会更新失败 和数据的自动验证,插入的时候可以自动验证,但更新的时候就不能验证了
- Thinkphp新增字段无法插入到数据库问题
- vs.net2008在开发环境下调试没有问题,发布后运行却提示"无法更新数据库,因为数据库是只读的"
- 【数据平台】Eclipse+Scala开发环境(本机和集群两个运行模式)
- thinkphp3.2 更新数据表某一字段的全部内容
- thinkphp新增字段无法插入数据库
- ThinkPHP 统计数据(数字字段)更新 setInc 与 setDec 方法
- THINKPHP使用自动表单变量更新数据表所存在的字段不全问题