首頁  >  文章  >  後端開發  >  使用thinkphp和php中的問題-preg_replace, 鍊式查詢

使用thinkphp和php中的問題-preg_replace, 鍊式查詢

WBOY
WBOY原創
2016-08-08 09:21:001103瀏覽

這篇又是講一下使用thinkphp時遇到的問題:

1.關於鍊式查詢

        $post_db = D('Post');

        $total = $post_db;

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

);   $list=$total

->order($order)->limit($limit)->select()

;  ); 這時我們發現,$count 的值並不是我們查出來的數量,而是總量,而且表達式

$total=$total ->where($where

1

)

;  與 

$total->where($where1);的效果是一樣的,$total總數時,只能重新查詢一遍,這是thinkphp裡很不人性的功能;2. php的原生函數:preg_replace()需求:想透過preg_replace()修改文字裡的特定值    最開始使用如下:(備份SQL時修改自增的起始值,為什麼有這個需求呢,這牽扯到資料庫備份時,備份log文件,分批備份,而此時log也一直在增加,導致自增值失配,在還原資料時有問題)          preg_replace('/AUTO_INCREMENT=(d+)/', 'AUTO_INCREMENT='.「$1」 + 2, $sql);

我們發現會被替換成$1不被識別,

                     而單獨使用'AUTO_INCREMENT='.“$1”,$1可以識別,

而單獨使用'AUTO_INCREMENT='.“$1”,$1可以識別,

那麼問題來了,如同變量看了,$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