《PHP實戰(zhàn):ThinkPHP數(shù)據(jù)操作方法總結(jié)》要點:
本文介紹了PHP實戰(zhàn):ThinkPHP數(shù)據(jù)操作方法總結(jié),希望對您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:thinkphp教程
PHP實例本文實例總結(jié)了ThinkPHP數(shù)據(jù)操作辦法.分享給大家供大家參考.具體如下:
PHP實例一、ThinkPHP Insert 添加數(shù)據(jù)
PHP實例ThinkPHP 內(nèi)置的 add 辦法用于向數(shù)據(jù)表添加數(shù)據(jù),相當于 SQL 中的 INSERT INTO 行為.
PHP實例添加數(shù)據(jù) add 辦法是 CURD(Create,Update,Read,Delete / 創(chuàng)建,修改,讀取,刪除)中的 Create 的實現(xiàn),ThinkPHP 支持以普通數(shù)組方式和面向?qū)ο蠓绞綄?shù)據(jù)寫入數(shù)據(jù)表.
PHP實例現(xiàn)在以《PHP MySQL 數(shù)據(jù)庫教程》中操作 user 表數(shù)據(jù)的例子(具體參見:PHP+MySQL之Insert Into數(shù)據(jù)插入用法分析)為例,來演示如安在 ThinkPHP 中實現(xiàn)對數(shù)據(jù)表的數(shù)據(jù)添加操作.
PHP實例例子:
PHP實例在 IndexAction 控制器(Lib/Action/IndexAction.class.php)里,添加 insert() 操作:
PHP實例
public function insert()
{
header("Content-Type:text/html; charset=utf-8");
$Dao = M("User"); // 實例化模型類 // 構(gòu)建寫入的數(shù)據(jù)數(shù)組
$data["username"] = "小王";
$data["password"] = md5("123456");
$data["email"] = 12345@163.com;
$data["regdate"] = time(); // 寫入數(shù)據(jù)
if($lastInsId = $Dao->add($data))
{
echo "插入數(shù)據(jù) id 為:$lastInsId";
}
else {
$this->error('數(shù)據(jù)寫入錯誤!');
}
}
PHP實例拜訪執(zhí)行該操作:http://127.0.0.1/html/Myapp/index.php/Index/insert
PHP實例語法解讀
PHP實例M("User") 用于高效實例化一個數(shù)據(jù)模型(M 是 new Model 的簡寫,稱為快捷辦法),參數(shù)為要操作的表名.
PHP實例接下來構(gòu)建要保存數(shù)據(jù)的數(shù)組 $data .
PHP實例最后是用 add() 辦法將數(shù)據(jù)寫入庫表,由于使用的是 M快捷辦法,需要將 $data 數(shù)組傳入 add() 辦法.
PHP實例add() 辦法如果添加數(shù)據(jù)記錄成功,返回的是新數(shù)據(jù)記錄主鍵,可直接得到.
該例子實際運行的 SQL 為:
PHP實例
INSERT INTO user
(username,password,email,regdate)
VALUES
('小王','e10adc3949ba59abbe56e057f20f883e','12345@163.com',1283612673)
PHP實例提示:運行該例子,請確認在配置文件里正確配置了數(shù)據(jù)庫的相關(guān)賬號暗碼等信息,具體參見《ThinkPHP公共配置文件與各自項目中配置文件組合的方法》
?
對象方式添加數(shù)據(jù)
PHP實例上面的方式是以構(gòu)造數(shù)據(jù)數(shù)組的方式,然后將數(shù)據(jù)以參數(shù)形式傳入 add 辦法寫入數(shù)據(jù)表.ThinkPHP 也支持以對象的方式將數(shù)據(jù)寫入數(shù)據(jù)表,將上面的代碼更改為:
PHP實例
public function insert()
{
header("Content-Type:text/html; charset=utf-8");
$Dao = M("User"); // 實例化模型類 // 數(shù)據(jù)對象賦值
$Dao->username = "小王";
$Dao->password = md5("123456");
$Dao->email = 12345@163.com;
$Dao->regdate = time(); // 寫入數(shù)據(jù)
if($lastInsId = $Dao->add()){ echo "插入數(shù)據(jù) id 為:$lastInsId";
}
else {
$this->error('數(shù)據(jù)寫入錯誤!');
}
}
PHP實例對象方式除了數(shù)據(jù)以數(shù)據(jù)對象方式賦值外,在調(diào)用 add 辦法寫入數(shù)據(jù)的時候不需要傳遞參數(shù).
PHP實例二、ThinkPHP 更新數(shù)據(jù) save辦法
PHP實例save()
PHP實例ThinkPHP 中使用 save() 辦法來更新數(shù)據(jù)庫,并且也支持連貫操作的使用.
例子:
PHP實例
public function update(){
header("Content-Type:text/html; charset=utf-8");
$Dao = M("User"); // 需要更新的數(shù)據(jù)
$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 '數(shù)據(jù)更新成功!';
}
else{
echo '數(shù)據(jù)更新失敗!';
}
}
PHP實例上面例子執(zhí)行的 SQL 語句為:
PHP實例UPDATE user SET email='Jack@163.com' WHERE username='Jack'
PHP實例提示
PHP實例為了保證數(shù)據(jù)庫的平安,避免出錯更新整個數(shù)據(jù)表,如果沒有任何更新條件,數(shù)據(jù)對象本身也不包含主鍵字段的話,save方法不會更新任何數(shù)據(jù)庫的記錄.
PHP實例因此要使用 save() 辦法更新數(shù)據(jù),必須指定更新條件或者更新的數(shù)據(jù)中包含主鍵字段.
PHP實例使用主鍵的例子:
PHP實例
public function update(){
header("Content-Type:text/html; charset=utf-8");
$Dao = M("User"); // 需要更新的數(shù)據(jù)
$data['email'] = 'Jack@163.com'; $data['uid'] = 2;
$result = $Dao->save($data);
if($result !== false)
{
echo '數(shù)據(jù)更新成功!';
}else{
echo '數(shù)據(jù)更新失敗!';
}
}
PHP實例如果需要更新的數(shù)據(jù)里面包含主鍵,那么 ThinkPHP 會自動把主鍵的值作為條件來更新.
PHP實例上面的例子跟下面的效果相同:
PHP實例// 需要更新的數(shù)據(jù) $data['email'] = 'Jack@163.com';
// 更新的條件 $condition['uid'] = 2; $result = $Dao->where($condition)->save($data);
如果是表單數(shù)據(jù),還可以使用 create() 辦法創(chuàng)建數(shù)據(jù)對象來更新數(shù)據(jù):
PHP實例
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 '數(shù)據(jù)更新成功!';
}else{
echo '數(shù)據(jù)更新失敗!';
} }
else{
$this->error($Form->getError());
}
}
PHP實例如果更新的數(shù)據(jù)需要做邏輯處理,可以在操作類以對象的方式處理或者在模型內(nèi)處理,具體可參考《ThinkPHP 表單數(shù)據(jù)智能寫入 create 辦法》.
PHP實例注意:以create() 方法創(chuàng)建數(shù)據(jù)對象來更新數(shù)據(jù),表單中必須包含一個以主鍵為名稱的暗藏域,才能完成保存操作.
PHP實例三、ThinkPHP 查詢數(shù)據(jù) select(findAll)辦法
PHP實例ThinkPHP 查詢數(shù)據(jù)主要提供以下幾類查詢:
select:普通查詢,同 findAll() 辦法
find:取得符合查詢條件的一條記錄
getBy動態(tài)查詢:根據(jù)某個字段取得符合查詢條件的一條記錄
getField:獲取某個字段的值或多個字段的索引數(shù)組
區(qū)間查詢:取得符合查詢條件的區(qū)間記錄
統(tǒng)計查詢:取得符合查詢條件的統(tǒng)計數(shù)據(jù)
定位查詢:取得符合查詢條件的一條或多條記錄
原生SQL查詢:支持以原生 SQL 進行查詢或執(zhí)行操作
PHP實例select()
PHP實例select() 是 ThinkPHP 中最常用的普通查詢辦法,得到的是一個二維數(shù)組.findAll() 為 select() 辦法的別名,并建議使用 select().
PHP實例讀取操作
PHP實例下面的例子將 user 表的所有數(shù)據(jù)讀取出來并顯示:
PHP實例
public function read()
{
$Dao = M("User"); // 查詢數(shù)據(jù)
$list = $Dao->select();
//dump($list);
// 用 dump() 可以在調(diào)試階段查看數(shù)據(jù)是否已讀取
// 模板變量賦值 $this->assign("list", $list);
// 輸出模板 $this->display();
}
PHP實例假設(shè)上面的例子對應(yīng)的 class 文件為 Lib/Action/IndexAction.class.php ,那么對應(yīng)的模板文件為 Tpl/default/Index/read.html.
PHP實例數(shù)據(jù)顯示模板
PHP實例模板文件用于顯示剛才讀取的 User 表的數(shù)據(jù).在學(xué)習階段,要不想使用模板,也可以直接使用 foreach 語法在 read() 操作內(nèi)直接顯示讀取的數(shù)據(jù).下面是模板相應(yīng)的代碼片段,我們將讀取的數(shù)據(jù)在一個表格中顯示出來:
PHP實例
<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>
PHP實例要了解更多關(guān)于 ThinkPHP模板的知識,請參閱:《ThinkPHP 模板》.
PHP實例field() 查詢指定字段
PHP實例select() 辦法默認是查詢所有字段的數(shù)據(jù),如果要查詢某個或某些字段,就需要使用 filed() 辦法.
PHP實例filed() 是屬于 ThinkPHP 連貫操作中的一個辦法,如在上面的例子中,只查詢用戶名和電子郵件地址,則查詢辦法對應(yīng)更改為:
PHP實例$list = $Dao->field('username,email')->select();
PHP實例使用查詢條件
PHP實例使用 ThinkPHP 連貫操作可以很方便的對數(shù)據(jù)查詢使用查詢條件.下面是一些簡單的查詢條件的例子.
PHP實例where() 條件
PHP實例…… // 構(gòu)造查詢條件 $condition['username'] = 'Admin'; // 查詢數(shù)據(jù) $list = $Dao->where($condition)->select(); ……
上述查詢的就是 username='Admin' 這個條件的數(shù)據(jù).關(guān)于 ThinkPHP where 條件更詳細資料,請參閱《ThinkPHP Where 條件》.
PHP實例ORDER BY 排序
PHP實例在查詢中使用 ORDER BY 對數(shù)據(jù)進行排序:
…… // 查詢數(shù)據(jù) $list = $Dao->order('uid DESC')->select(); ……
這個例子就是數(shù)據(jù)依照 ORDER BY uid DESC 進行查詢,而 order() 方法中的參數(shù)意義跟 SQL 語句中的意義完全一致.
PHP實例LIMIT 限制
PHP實例在查詢中使用 LIMIT 限定數(shù)據(jù)返回的記錄數(shù):
…… // 查詢數(shù)據(jù) $list = $Dao->limit('4,5')->select(); ……
這個例子就是將第 5-10 條記錄取出,limit() 辦法內(nèi)的參數(shù)意義跟 SQL 語句中的 LIMIT 完全一致.
PHP實例連貫操作
PHP實例ThinkPHP 中允許將數(shù)據(jù)對象中的各個辦法寫在一起操作,如:
$list = $Dao->order('uid DESC')->limit('4,5')->select();
這就是連貫操作,關(guān)于連貫操作更詳細的介紹,參見《ThinkPHP 連貫操作》.
?
四、ThinkPHP 刪除數(shù)據(jù)記錄 delete 辦法
PHP實例ThinkPHP 中使用 delete() 辦法來刪除數(shù)據(jù)庫中的數(shù)據(jù)記錄,并且也支持連貫操作的使用.delete() 辦法執(zhí)行成功返回操作影響(刪除)的記錄數(shù).
PHP實例例子:
PHP實例
public function del(){
header("Content-Type:text/html; charset=utf-8");
$Dao = M("User"); // 刪除 uid=5 的數(shù)據(jù)記錄
$result = $Dao->where('uid = 5')->delete();
if($result !== false){
echo '刪除 ',$result,' 條數(shù)據(jù).';
}else{
echo '刪除數(shù)據(jù)失敗!';
}
}
PHP實例上面例子執(zhí)行的 SQL 為:
PHP實例DELETE FROM user WHERE uid = 5
PHP實例delete() 辦法可以用于刪除單個或者多個數(shù)據(jù),主要取決于 where() 刪除條件.另外也可以配合連貫操作中的其他辦法如 order()、limit() 等構(gòu)造出更符合需要的刪除條件:
PHP實例
$Dao = M("User");
$result = $Dao->where('status=0')->order('regdate ASC')->limit('5')->delete();
PHP實例上面例子根據(jù)用戶注冊時間降序排列,刪除 5 條 status=0 的用戶記錄.
PHP實例希望本文所述對大家基于ThinkPHP框架的php程序設(shè)計有所贊助.
歡迎參與《PHP實戰(zhàn):ThinkPHP數(shù)據(jù)操作方法總結(jié)》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/8643.html