• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2022-01-23) 22次浏览 已收录 0个评论

这篇又是讲一下使用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”类似的6本文来源gao@dai!ma.com搞$代^码!网7

搞gaodaima代码

变量,变量的使用会有问题,没去查具体原因,

我的解决方法是:

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教程有兴趣的朋友有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:使用thinkphp和php中的问题-preg_replace, 链式查询

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址