关于php扩展自己操作数据库操作框架的问题

原文: https://blog.csdn.net/xyz_dream/article/details/79847342

最近有一个特别的需求,需要把数据库原有的所有表都要加上一个channel字段??? 这个需求看起来似乎很简单,没什么难度,最多写个迁移脚本加字段就可以了。还有特别注意的是,对于老数据的迁移,记得要进行分页处理操作,不能使用可怕的”SELECT FROM TABLE_NAME”,因为你无法预测到数据量的大小,否则容易使内存爆掉。对数据进行分页处理才是最好的解决方案。以及在处理数据迁移的时候,可以通过排序,id从小到大地处理,防止从大到小遗漏新的数据没有迁移到。对于数据原来的拷贝的话,记得分页其实要注意最后一页的处理,最后一页一定要特别注意,最后一页假如是整除,则没关系。不是整除的话我们正常的写法是,SELECT FROM TABLE WHERE col = clo_val limit (lastpage-1)*per_page ,perpage. 最后的这个perpage其实是错的,大家试想假设要拷贝8条数据,分页每页2条。那么分页是4页。完全没有问题,整除。但是假如是9条,分页是5页。但是最后一页如果你还是per_page页 其实多出了4条已经拷贝的数据。最后一页其实应该是这个么处理 count_num%per_page ,若是0 则取per_page条数据,否则取余数条数据。这样才是正解。

回到最初的问题,似乎加字段感觉没什么难的。但是大家有没有考虑到,原来的代码中是没有channel字段的,现在需要暴露一channel字段,前端传入进来,插入新的channel字段。这个才是最头疼的,因为代码当中只要是操作表的地方和接口的地方都要暴露出一个channel出来。这要修改很多的东西。 所以,我在想,在设计操作数据库类的时候,对于where条件,插入的数据,查询的条件等预留一个前置和后置操作,尽管这个前置和后置函数没有写什么内容。但是假如以后要出现类似的情况的话,其实几行代码的事情就能解决了。效率一下提升了n倍,我们只要在操作这些表的前置和后置函数中添加例如在条件中假如 where [“channel”=>$_POST[‘channel’]] ,插入的数据加上一个channel,查询条件加上channel条件,这个工作量比你之前的做法是不是会大大减少许多,并且出错的概率减少许多。

其实和Java中去设置setter 和 getter是一样的。平时好像我们没有对其做任何事情,内容很简单,getter直接返回,setter直接设置值。但是假设你的代码中关于这个类的对象使用很多,大到几千处,几万处。假设之前你没写getter setter,只是通过public暴露出来就直接使用。现在突然有一个需求,对这个参数进行某种设置变换规则,之前这个值是普通值,现在我需要对这个值进行md5加密。设想没有getter setter你会疯掉的。现在靠setter getter ,几行代码搞定。完美