A. thinkphp 資料庫查詢怎麼查
thinkphp如何查詢資料庫?
資料庫查詢
ThinkPHP內置了非常靈活的查詢方法,可以快速的進行數據查詢操作。
查詢條件可以用於CURD等任何操作,作為where方法的參數傳入即可。
ThinkPHP可以支持直接使用字元串作為查詢條件,但是大多數情況推薦使用索引數組或者對象來作為查詢條件,因為會更加安全。
查詢方式
一、使用字元串作為查詢條件
這是最傳統的方式,但是安全性不高,例如:
1
2
$User = M("User"); // 實例化User對象
$User->where('type=1 AND status=1')->select();
最後生成的sql語句是
1
SELECT * FROM think_user WHERE type=1 AND status=1
二、使用數組作為查詢條件
1
2
3
4
5
$User = M("User"); // 實例化User對象
$condition['name'] = 'thinkphp';
$condition['status'] = 1;
// 把查詢條件傳入查詢方法
$User->where($condition)->select();
最後生成的SQL語句是
1
SELECT * FROM think_user WHERE 'name'='thinkphp' AND status=1
如果進行多欄位查詢,那麼欄位之間的默認邏輯關系是 邏輯與 AND,但是用下面的規則可以更改默認的邏輯判斷,通過使用 _logic 定義查詢邏輯:
1
2
3
4
5
6
$User = M("User"); // 實例化User對象
$condition['name'] = 'thinkphp';
$condition['account'] = 'thinkphp';
$condition['_logic'] = 'OR'; //定義查詢邏輯
// 把查詢條件傳入查詢方法
$User->where($condition)->select();
最後生成的SQL語句是
1
SELECT * FROM think_user WHERE 'name'='thinkphp' OR `account`='thinkphp'
三、使用對象方式來查詢 (這里以stdClass內置對象為例)
1
2
3
4
5
6
$User = M("User"); // 實例化User對象
// 定義查詢條件
$condition = new stdClass();
$condition->name = 'thinkphp';
$condition->status= 1;
$User->where($condition)->select();
最後生成的SQL語句和上面一樣
1
SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
使用對象方式查詢和使用數組查詢的效果是相同的,並且是可以互換的,大多數情況下,我們建議採用數組方式更加高效,後面我們會以數組方式為例來講解具體的查詢語言用法。
表達式查詢
上面的查詢條件僅僅是一個簡單的相等判斷,可以使用查詢表達式支持更多的SQL查詢語法,並且可以用於數組或者對象方式的查詢(下面僅以數組方式為例說明),查詢表達式的使用格式:
1
$map['欄位名'] = array('表達式','查詢條件');
表達式不分大小寫,支持的查詢表達式有下面幾種,分別表示的含義是:
1
2
3
4
$map['id'] = array('eq',100); id = 100;
$map['id'] = array('egt',100);id >= 100
$map['name'] = array('like','thinkphp%'); name like 'thinkphp%' 模糊查詢
$map['a'] =array('like',array('%thinkphp%','%tp'),'OR');$map['b'] =array('notlike',array('%thinkphp%','%tp'),'AND'); (a like '%thinkphp%' OR a like '%tp') AND (b not like '%thinkphp%' AND b not like '%tp')
本文來自ThinkPHP框架技術文章欄目:http://www.php.cn/phpkj/thinkphp/
以上就是thinkphp如何查詢資料庫的詳細內容,更多請關注php中文網其它相關文章!
B. php操作資料庫WHERE語句查詢中文報錯,無法讀取數據
MYSQL的欄位名轉義使用返引號`,不是單引號,注意上面代碼的下面部分:
WHERE '賬戶'='中文'; //查詢中文字報錯,數字字母都能正常查詢
【賬戶】是欄位名,應使用反引號:
`賬戶`
【中文】是常量,單雙引號都可以,但是要注意你現在的語句是在單引號裡面,因此應該轉義或者使用雙引號,這部分可以修改為:
WHERE 賬戶="中文"';
另外,如果只是查詢中文內容才報錯,可能你粘貼代碼和原始代碼有區別,原始代碼沒有把欄位名放在單引號裡面,否則是查不到內容的。查詢中文內容報錯,一般是中文的編碼和網頁文件的編碼、以及資料庫的編碼不一致,你這來資料庫是UTF8,那麼PHP腳本文件、瀏覽器網頁都必須使用UTF-8
C. 用php在mysql資料庫內查詢中文出錯(編碼問題)
資料庫的編碼是 gbk 的,在查詢的時候把中文(utf-8)轉換成 gbk編碼就可以了
$nickname=iconv('utf-8','gbk//TRANSLIT',$nickname);
轉換後才執行查詢
D. php 向資料庫發送中文字元無法查詢
你的問題可能是資料庫連接時未指定字元集:$conn->query("set names utf8");
詳細如下:
將中文字元轉換一下,可能你的網頁編碼是ansi非utf-8的:
$w=iconv("gb2312","utf-8",$w);
不過我不確定這樣做你能否成功。關於字元有以下幾點你看下:
資料庫連接時: $conn->query("set names gbk");
資料庫的字元集:建議建立資料庫時就指定字元集,比如gbk或者utf-8,這樣你就沒必要為單獨的表或者欄位指定字元集
網頁字元:<META CONTENT="text/html; charset=gbk" HTTP-EQUIV="Content-Type" />
保持著三者使用的字元集一樣,基本能解決你的問題。
當然,在使用ajax時。js傳遞過來的是utf-8,如果你的php文件和資料庫使用的是中文字元集如gbk,gb2312,那麼就需要對該值用iconv函數轉換下字元集,如:$w=iconv("utf-8","gb2312",$w);
總之,需要這幾塊的字元集保持一致。