ThinkPHP資料操作方法總結_php執行個體

來源:互聯網
上載者:User
本文執行個體總結了ThinkPHP資料操作方法。分享給大家供大家參考。具體如下:

一、ThinkPHP Insert 添加資料

ThinkPHP 內建的 add 方法用於向資料表添加資料,相當於 SQL 中的 INSERT INTO 行為。

添加資料 add 方法是 CURD(Create,Update,Read,Delete / 建立,修改,讀取,刪除)中的 Create 的實現,ThinkPHP 支援以普通數組方式和物件導向方式將資料寫入資料表。

現在以《PHP MySQL 資料庫教程》中操作 user 表資料的例子(具體參見:PHP+MySQL之Insert Into資料插入用法分析)為例,來示範如何在 ThinkPHP 中實現對資料表的資料添加操作。

例子:

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

public function insert(){header("Content-Type:text/html; charset=utf-8"); $Dao = M("User"); // 執行個體化模型類 // 構建寫入的資料數組 $data["username"] = "小王"; $data["password"] = md5("123456"); $data["email"] = 12345@163.com;$data["regdate"] = time(); // 寫入資料if($lastInsId = $Dao->add($data)){echo "插入資料 id 為:$lastInsId"; }else { $this->error('資料寫入錯誤!');}}

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

文法解讀

M("User") 用於高效執行個體化一個資料模型(M 是 new Model 的簡寫,稱為快捷方法),參數為要操作的表名。

接下來構建要儲存資料的數組 $data 。

最後是用 add() 方法將資料寫入庫表,由於使用的是 M快捷方法,需要將 $data 數組傳入 add() 方法。

add() 方法如果添加資料記錄成功,返回的是新資料記錄主鍵,可直接得到。
該例子實際啟動並執行 SQL 為:

INSERT INTO user(username,password,email,regdate) VALUES('小王','e10adc3949ba59abbe56e057f20f883e','12345@163.com',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 = 12345@163.com; $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'] = 'Jack@163.com';// 更新的條件 $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='Jack@163.com' WHERE username='Jack'

提示

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

因此要使用 save() 方法更新資料,必須指定更新條件或者更新的資料中包含主鍵欄位。

使用主鍵的例子:

public function update(){ header("Content-Type:text/html; charset=utf-8"); $Dao = M("User"); // 需要更新的資料 $data['email'] = 'Jack@163.com'; $data['uid'] = 2; $result = $Dao->save($data);if($result !== false){echo '資料更新成功!'; }else{echo '資料更新失敗!'; }}

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

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

// 需要更新的資料 $data['email'] = 'Jack@163.com';
// 更新的條件 $condition['uid'] = 2; $result = $Dao->where($condition)->save($data);
如果是表單資料,還可以使用 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() 操作內直接顯示讀取的資料。下面是模板相應的程式碼片段,我們將讀取的資料在一個表格中顯示出來:

ID 使用者名稱 電子郵件註冊時間
{$vo['uid']} {$vo['username']}{$vo['email']} {$vo['regdate']|date='Y-m-d H:i',###}

要瞭解更多關於 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 條件》。

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架構的php程式設計有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.