程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> THINKPHP 的常用數據操作方法以及示例

THINKPHP 的常用數據操作方法以及示例

編輯:PHP基礎知識
 

一·ThinkPHP Insert 添加數據

ThinkPHP 內置的 add 方法用於向數據表添加數據,相當於 SQL 中的 INSERT INTO 動作。

添加數據 add 方法是 CURD(Create,Update,Read,Delete / 創建,修改,讀取,刪除)中的 Create 的實現,ThinkPHP 支持以普通數組方式和面向對象方式將數據寫入數據表。

現在以《PHP MySQL 數據庫教程》中操作 user 表數據的例子(具體參見:MySQL Insert into 添加數據)為例,來演示如何在 ThinkPHP 中實現對數據表的數據添加操作。

例子:

在 IndexAction 控制器(Lib/Action/IndexAction.class.php)裡,添加 insert() 操作:

public function insert()

{

header(“Content-Type:text/html; charset=utf-8″);//發送utf-8編碼頭,防止網頁亂碼

$Dao = M(“User”); // 實例化模型類 // 構建寫入的數據數組

$data[“username”] = “小王”;

$data[“password”] = md5(“123456″);

$data[“email”] = [email protected];

$data[“regdate”] = time(); // 寫入數據

if($lastInsId = $Dao->add($data))

{

echo “插入數據 id 為:$lastInsId”;//成功後返回操作的id

}

else {

$this->error(‘數據寫入錯誤!’);

} }

訪問執行該操作:http://127.0.0.1/html/Myapp/index.php/Index/insert

或者,這裡可以這樣用:(用原生的sql)

$DAO=new Model();

$sql=”

INSERT INTO user

(username,password,email,regdate)

VALUES

(‘小王’,’e10adc3949ba59abbe56e057f20f883e’,’[email protected]’,1283612673)

“;//”插入數據的sql”;

$DAO->query($sql);

語法解讀

M(“User”) 用於高效實例化一個數據模型(M 是 new Model 的簡寫,稱為快捷方法),參數為要操作的表名。接下來構建要保存數據的數組 $data 。最後是用 add() 方法將數據寫入庫表,由於使用的是 M快捷方法,需要將 $data 數組傳入 add() 方法。add() 方法如果添加數據記錄成功,返回的是新數據記錄主鍵,可直接得到。

該例子實際運行的 SQL 為:

INSERT INTO user

(username,password,email,regdate)

VALUES

(‘小王’,’e10adc3949ba59abbe56e057f20f883e’,’[email protected]’,1283612673)

提示:運行該例子,請確認在配置文件裡正確配置了數據庫的相關賬號密碼等信息,具體參見《ThinkPHP 項目配置》

 

對象方式添加數據

上面的方式是以構造數據數組的方式,然後將數據以參數形式傳入 add 方法寫入數據表。ThinkPHP 也支持以對象的方式將數據寫入數據表,將上面的代碼更改為:

public function insert()

{

header(“Content-Type:text/html; charset=utf-8″);

$Dao = M(“User”); // 實例化模型類 // 數據對象賦值

$Dao->username = “小王”;

$Dao->password = md5(“123456″);

$Dao->email = [email protected];

$Dao->regdate = time(); // 寫入數據

if($lastInsId = $Dao->add()){ echo “插入數據 id 為:$lastInsId”;

}

else {

$this->error(‘數據寫入錯誤!’);

} }

對象方式除了數據以數據對象方式賦值外,在調用 add 方法寫入數據的時候不需要傳遞參數。

二·ThinkPHP 更新數據 save方法

save()

ThinkPHP 中使用 save() 方法來更新數據庫,並且也支持連貫操作的使用。

例子:

public function update(){

header(“Content-Type:text/html; charset=utf-8″);

$Dao = M(“User”); // 需要更新的數據

$data[‘email’] = ‘[email protected]’;

// 更新的條件 $condition[‘username’] = ‘Jack’;

$result = $Dao->where($condition)->save($data);

//或者:$resul t= $Dao->where($condition)->data($data)->save();

if($result !== false){ echo ‘數據更新成功!’;

}

else{

echo ‘數據更新失敗!’;

} }

上面例子執行的 SQL 語句為:

UPDATE user SET email=’[email protected]’ WHERE username=’Jack’

提示

為了保證數據庫的安全,避免出錯更新整個數據表,如果沒有任何更新條件,數據對象本身也不包含主鍵字段的話,save方法不會更新任何數據庫的記錄。

因此要使用 save() 方法更新數據,必須指定更新條件或者更新的數據中包含主鍵字段。

使用主鍵的例子:

public function update(){

header(“Content-Type:text/html; charset=utf-8″);

$Dao = M(“User”); // 需要更新的數據

$data[‘email’] = ‘[email protected]’; $data[‘uid’] = 2;

$result = $Dao->save($data);

if($result !== false)

{

echo ‘數據更新成功!’;

}else{

echo ‘數據更新失敗!’;

} }

如果需要更新的數據裡面包含主鍵,那麼 ThinkPHP 會自動把主鍵的值作為條件來更新。

上面的例子跟下面的效果相同:

// 需要更新的數據 $data[‘email’] = ‘[email protected]’; // 更新的條件 $condition[‘uid’] = 2; $result = $Dao->where($condition)->save($data);

同樣,這裡也可以使用$DAO->query($sql)這樣的方法實現

如果是表單數據,還可以使用 create() 方法創建數據對象來更新數據:

public function update(){

header(“Content-Type:text/html; charset=utf-8″);

$Dao = D(“User”);

if($vo = $Dao->create())

{ $result = $Dao->save();

if($result !== false)

{ echo ‘數據更新成功!’;

}else{

echo ‘數據更新失敗!’;

} }

else{

$this->error($Form->getError());

} }

如果更新的數據需要做邏輯處理,可以在操作類以對象的方式處理或者在模型內處理,具體可參考《ThinkPHP 表單數據智能寫入 create 方法》。

注意:以create() 方法創建數據對象來更新數據,表單中必須包含一個以主鍵為名稱的隱藏域,才能完成保存操作。

三·ThinkPHP 查詢數據 select(findAll)方法

ThinkPHP 查詢數據主要提供以下幾類查詢:

select:普通查詢,同 findAll() 方法find:取得符合查詢條件的一條記錄getBy動態查詢:根據某個字段取得符合查詢條件的一條記錄getField:獲取某個字段的值或多個字段的索引數組區間查詢:取得符合查詢條件的區間記錄統計查詢:取得符合查詢條件的統計數據定位查詢:取得符合查詢條件的一條或多條記錄原生SQL查詢:支持以原生 SQL 進行查詢或執行操作

select()

select() 是 ThinkPHP 中最常用的普通查詢方法,得到的是一個二維數組。findAll() 為 select() 方法的別名,並建議使用 select()。

讀取操作

下面的例子將 user 表的所有數據讀取出來並顯示:

public function read()

{

$Dao = M(“User”); // 查詢數據

$list = $Dao->select();

//dump($list);

// 用 dump() 可以在調試階段查看數據是否已讀取

// 模板變量賦值 $this->assign(“list”, $list);

// 輸出模板 $this->display();

}

假設上面的例子對應的 class 文件為 Lib/Action/IndexAction.class.php ,那麼對應的模板文件為 Tpl/default/Index/read.html。

數據顯示模板

模板文件用於顯示剛才讀取的 User 表的數據。在學習階段,要不想使用模板,也可以直接使用 foreach 語法在 read() 操作內直接顯示讀取的數據。下面是模板相應的代碼片段,我們將讀取的數據在一個表格中顯示出來:

<table border=”1″>

<tr>

<th width=”10%”>ID</th>

<th width=”30%”>用戶名</th>

<th width=”30%”>電子郵件</th>

<th>注冊時間</th>

</tr>

<volist name=”list” id=”vo”>

<tr>

<td align=”center”>{$vo[‘uid’]}</td>

<td>{$vo[‘username’]}</td>

<td>{$vo[‘email’]}</td>

<td>{$vo[‘regdate’]|date=’Y-m-d H:i’,###}</td>

</tr>

</volist>

</table>

要了解更多關於 ThinkPHP模板的知識,請參閱:《ThinkPHP 模板》。

field()查詢指定字段

select() 方法默認是查詢所有字段的數據,如果要查詢某個或某些字段,就需要使用 filed() 方法。

filed() 是屬於 ThinkPHP 連貫操作中的一個方法,如在上面的例子中,只查詢用戶名和電子郵件地址,則查詢方法對應更改為:

$list = $Dao->field(‘username,email’)->select();

使用查詢條件

使用 ThinkPHP 連貫操作可以很方便的對數據查詢使用查詢條件。下面是一些簡單的查詢條件的例子。

where()條件

…… // 構造查詢條件 $condition[‘username’] = ‘Admin’; // 查詢數據 $list = $Dao->where($condition)->select(); ……

上述查詢的就是 username=’Admin’ 這個條件的數據。關於 ThinkPHP where 條件更詳細資料,請參閱《ThinkPHP Where 條件》。

$condition條件比較靈活,這裡可以使用數組,比如類似select * from result where id in(12,13,14) 這樣的sql,可以使用$condition=array(‘in’,array(12,13,14));

$DAO->where($condition)->select();來選擇在特定范圍內的數據

ORDER BY排序

在查詢中使用 ORDER BY 對數據進行排序:

…… // 查詢數據 $list = $Dao->order(‘uid DESC’)->select(); ……

這個例子就是數據按照 ORDER BY uid DESC 進行查詢,而 order() 方法中的參數意義跟 SQL 語句中的意義完全一致。

LIMIT限制

在查詢中使用 LIMIT 限定數據返回的記錄數:

…… // 查詢數據 $list = $Dao->limit(’4,5′)->select(); ……

這個例子就是將第 5-10 條記錄取出,limit() 方法內的參數意義跟 SQL 語句中的 LIMIT 完全一致。

連貫操作

ThinkPHP 中允許將數據對象中的各個方法寫在一起操作,如:

$list = $Dao->order(‘uid DESC’)->limit(’4,5′)->select();

這就是連貫操作,關於連貫操作更詳細的介紹,參見《ThinkPHP 連貫操作》。

四·ThinkPHP 刪除數據記錄 delete 方法

ThinkPHP 中使用 delete() 方法來刪除數據庫中的數據記錄,並且也支持連貫操作的使用。delete() 方法執行成功返回操作影響(刪除)的記錄數。

例子:

public function del(){

header(“Content-Type:text/html; charset=utf-8″);

$Dao = M(“User”); // 刪除 uid=5 的數據記錄

$result = $Dao->where(‘uid = 5′)->delete();

if($result !== false){

echo ‘刪除 ‘,$result,’ 條數據。’;

}else{

echo ‘刪除數據失敗!’;

} }

上面例子執行的 SQL 為:

DELETE FROM user WHERE uid = 5

delete() 方法可以用於刪除單個或者多個數據,主要取決於 where() 刪除條件。另外也可以配合連貫操作中的其他方法如 order()、limit() 等構造出更符合需要的刪除條件:

$Dao = M(“User”);

$result = $Dao->where(‘status=0′)->order(‘regdate ASC’)->limit(’5′)->delete();

上面例子根據用戶注冊時間降序排列,刪除 5 條 status=0 的用戶記錄。

以上是一些常用的thinkphp的常用查詢方法,具體的可以參照thinkphp的數據操作方法,還有一些豐富復雜的用法,比如說join連表查詢和group by分組查詢等。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved