這篇又是講一下使用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教程有興趣的朋友有所幫助。