• 技术文章 >后端开发 >php教程

    使用thinkphp和php中的问题-preg_replace, 链式查询

    2016-08-08 09:21:00原创690
    这篇又是讲一下使用thinkphp时遇到的问题:

    1.关于链式查询

    $post_db = D('Post');

    $total = $post_db;

    $total=$total->where($where1);

    $total=$total->where($where2);

    $list=$total->order($order)->limit($limit)->select();

    $count=$total->count();

    这时我们发现,$count 的值并不是我们查出来的数量,而是总量,而且表达式

    $total=$total ->where($where1); 与 $total->where($where1);的效果是一样的,$total的值会改变,如果我们需要查询总数时,只能重新查询一遍,这是thinkphp里很不人性的功能;

    2. php的原生函数:preg_replace()

    需求:想通过preg_replace()修改文本里的特定值

    最开始使用如下:(备份SQL时修改自增的起始值,为什么有这个需求呢,这牵扯到数据库备份时,备份log文件,分批备份,而此时log也一直在增加,导致自增值失配,在还原数据时有问题)

    preg_replace('/AUTO_INCREMENT=(\d+)/', 'AUTO_INCREMENT='.“$1” + 2, $sql);

    我们发现会被替换成 AUTO_INCREMENT= 2,而$1不被识别,

    而单独使用'AUTO_INCREMENT='.“$1”,$1可以识别,

    那么问题来了,看样子preg_replace() 的第二个参数如果引用了如“$1”类似的变量,变量的使用会有问题,没去查具体原因,

    我的解决方法是:

    if(preg_match('/AUTO_INCREMENT=(\d+)/',$sql,$matches)){
    $auto_int_start = $matches[1] + (int)($count/C('DATA_BACKUP_EXPORT_LIMIT'));
    }
    $sql = preg_replace('/AUTO_INCREMENT=(\d+)/', 'AUTO_INCREMENT='.$auto_int_start, $sql);

    那就是事先把只计算好,再替换,后面再看看具体原因吧,如果有同学知道原理,也可以留言告诉我,3Q!

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    以上就介绍了使用thinkphp和php中的问题-preg_replace, 链式查询,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:nbsp total INCREMENT where AUTO
    上一篇:AVS30 程序分析1 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • PHP Hyperf 3.0 发布!新功能速览• 详解PHP怎么实现旋转图片验证• 简单理解PHP超级全局变量• 一起聊聊PHP的路由与伪静态应用• PHP中几种常见的开发模式
    1/1

    PHP中文网