Thinkphp 連接數據庫、查詢、添加


一、連接數據庫配置及Model數據模型層

1. Thinkphp\conf\convertion.php中找到數據庫設置部分,復制到自己的配置文件中,並添加好有關數據庫的內容

    JiaoWu\Home\conf\config.php:

2. 制作model模型

a)  model本身就是一個類文件

b)  數據庫中的每個數據表都對應一個model模型文件

c)  最簡單的數據model模型類

在Home\Model文件夾中新建一個模型文件:InfoModel.class.php

<?php
namespace Home\Model;
use Think\Model;
class InfoModel extends Model
{
    
    }

 

3. 實例化Model的三種方式:

  1. $goods =  new  命名空間GoodsModel(); 
  2. $goods = D(‘模型標志’);   

a)   $goods = D(“Goods”);

b)   該$goods是父類Model的對象,但是操作的數據表還是sw_goods

c)   $obj = D();  實例化Model對象,沒有具體操作數據表,與M()方法效果一致

  1. $obj = M();

a)   實例化父類Model

b)   可以直接調用父類Model里邊的屬性,獲得數據庫相關操作

c)   自定義model就是一個空殼,沒有必要實例化自定義model

d)  $obj = M(‘數據表標志’);  實例化Model對象,實際操作具體的數據表

  $obj = D(標志);

  $obj = D();

  $obj = M(標志);

  $obj = M();

D()和M()方法的區別:

  1. 前者是tp3.1.3里邊對new操作的簡化方法; 

  2. 后者在使用就是實例化Model父類

      3. 兩者都在函數庫文件定義ThinkPHP/Common/functions.php 

注意:如果沒有對應的model模型文件類,也可以直接實例化model對象進行操作

     D()和M()方法都可以實例化操作一個沒有具體model模型類文件的數據表。

 function ShowAll()
     {
        //Model:數據庫中每張表對應一個模型
        //類名是表名,類里面的成員變量是列名
        //把一張表對應為一個類,其中一條數據對應一個對象
        
        //如果我們對該表的模型沒有特殊操作的話可以不用建立該模型        
         
         //1.實例化model類
         $info=new \Home\Model\InfoModel();
         //var_dump($info);
             
        //2.使用D()方法
        $info = D("Info");
        //var_dump($info);
        
        //3.使用M()方法
        $car=M("Car");
        //var_dump($car);

 

二、數據查詢

select()是數據模型的一個指定方法,可以獲得數據表的數據信息

       返回一個二維數組信息,當前數據表的全部數據信息

$obj = D();  創建對象

查詢常使用的方法:

$obj -> select();  查詢數據,使用select()會返回一個二維數組

$obj -> field(字段,字段);  查詢指定字段

$obj -> table(數據表);   設置具體操作數據表

$obj -> where(參數);   參數就是正常sql語句where后邊的條件信息

    例如:( “goods_price >100 and  goods_name like ‘三%’”)

$obj -> group(字段);  根據字段進行分組查詢

$obj -> having(參數條件);  having 條件設置

$obj -> order(‘price  desc/asc’)  排序查詢

$obj -> limit([偏移量,]條數)  限制查詢的條數

$obj -> page()   分頁類Page可以自動計算出每個分頁的limit參數

    例如:$obj->page("1,10")->select(); // 查詢第一頁數據

       $obj->page("2,10")->select(); // 查詢第二頁數據

$obj ->find():如果我們查詢的結果只有一個信息,為了使用方便我們會希望返回一個一維數組,這時候可使用find()方法

相關聚合函數: count()  sum()   avg()   max()   min()

       以上聚合函數是最后被調用的方法

       以上方法可以結合具體條件方法使用

       例如:$goods -> where(‘goods_price >1000’)->count(); 大於1000元的商品的總數目

//汽車表Car
        $car=M("Car");
        var_dump($info->select());//返回所有數據的二維數組   //使用TP框架時,建表是表名和列名最好都用小寫
        $attr=$car->where("brand='b002'")->select();//where方法可以添加查詢條件
        
        $attr=$car->table("Nation")->select();//table方法可以切換操作表
        $attr=$car->field("name,code")->select();//指定查詢的字段
        
        $attr=$car->order("oil desc")->select();//排序
        $attr=$car->limit(2,2)->select();//分頁查詢,如果是一個參數是取前n個數據,兩個數據是跳過幾個取幾個
        $attr=$car->page(3,2)->select();//分頁查詢,可以取第幾頁的n條數據
        $attr=$car->field("brand,count(*)")->group("brand")->select();//分組查詢
        $attr=$car->join("brand on car.brand=brand.brand_code")->select();//連接查詢
        
        $attr=$car->distinct(true)->field("brand")->select();//distinct(true)去重
        $attr=$car->find("c001");//查一條數據,只根據主鍵值查,返回一維數組,不寫主鍵值默認返回第一條
        $attr=$car->select();//根據主鍵值查多條數據,返回二位數組,
        $attr=$car->where("name like '%奧迪%'")->order("powers desc")->select();
        //var_dump($attr);
        
        //聚合函數:可以放在最后
        $attr=$car->count();
        $attr = $car->avg("Price");
        echo $attr;

自己拿Info表做的練習:

 1 //info表
 2         $info=M("Info");    
 3         var_dump($info);
 4         $attr=$info->select();
 5         $attr=$info->where("nation='n001'")->select();
 6         $attr=$info->table("Nation")->select();
 7         $attr=$info->field("sex,birthday")->select();
 8         $attr=$info->order("birthday")->select();
 9         $attr=$info->field("nation,count(*)")->group("nation")->select();
10         $attr=$info->limit(1,2)->select();
11         $attr=$info->page(2,3)->select();
12         $attr=$info->join("nation on Info.Nation=Nation.Code")->select();
13         $attr=$info->distinct(true)->field("birthday")->select();
14         $attr=$info->find("p010");
15         $attr=$info->select("p010,p120");
16         
17         var_dump($attr);
View Code

如何在頁面顯示查詢出的表格內容:

1. 在MainController.class.php控制器中寫一個方法,實例化model,查詢info表內容,然后注冊到前端

 function ShowAll()
{
    $info=M("Info");    
    $attr=$info->select();
    $this->assign("shuju",$attr);
    $this->display(); 
}

2.在View\Main中新建:ShowAll.html

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>無標題文檔</title>
 6 </head>
 7 
 8 <body>
 9 <h1>信息查詢</h1>
10 <table width="100%" cellpadding="0" cellspacing="0" border="1">
11 <tr>
12 <td>代號</td>
13 <td>姓名</td>
14 <td>性別</td>
15 <td>民族</td>
16 <td>生日</td>
17 </tr>
18 
19 <foreach name="shuju" item="v">
20 <tr>
21 <td><{$v.code}></td>
22 <td><{$v.name}></td>
23 <td><{$v.sex}></td>
24 <td><{$v.nation}></td>
25 <td><{$v.birthday}></td>
26 </tr>
27 </foreach>
28 </table>
29 </body>
30 </html>
View Code

3.運行結果:

 

三、數據添加

add() 該方法返回被添加的新記錄的主鍵id值

三種方式實現數據添加

  1. 數組方式數據添加

  $goods = D(“Goods”);

  $arr = array(‘goods_name’=>’iphone5s’,’goods_weight’=>’109’);

  //注意:goods_name和goods_weight是數據表中字段名稱

  $goods -> add($arr);

 

 function Add()
     {
        //1.數組添加數據
        //要添加的數組,必須是關聯數組,key必須為字段名稱
        //方式一:
        $model=D("Info");
        $attr=array(
        "Code"=>"p100",
        "Name"=>"ww",
        "Sex"=>true,
        "Nation"=>"n001",
        "Birthday"=>"1999-01-01"
        );
        //方式二:
        $attr["Code"]="p111";
        $attr["Name"]="小豪";
        $attr["Sex"]=false;
        $attr["Nation"]="n003";
        $attr["Birthday"]="1993-08-20";
        
        $model->add($attr);//添加數據的方法。需要參數,該參數是關聯數組
  }

 

  2.  AR方式實現數據添加

  a)         ActiveRecord  活躍記錄

  b)        AR規定了程序與數據庫之間的關系

  c)         什么是AR:

  d)        ① 一個數據表對應一個類model

  e)         ② 一條數據記錄對應類的一個對象

  f)         ③ 每個字段對應該對象的具體屬性

  g)        tp框架的AR是假的

  $goods = D(“Goods”);

  $goods -> goods_name = “htc_one”;

  $goods -> goods_price = 3000;

  $goods -> add();

以上兩種方式:數組、AR,最后add都要把新記錄的主鍵id值返回

 function Add()
{
     //2.AR方式實現數據添加(對象方式)
     //1.連接類  2.實體類  3.數據訪問類
     $model=D("Info");
     $model->Code="p120";
     $model->Name="yuyu";
     $model->Sex=true;
     $model->Nation="n004";
     $model->Birthday="1999-9-9";
     $model->add();  
}     

 

  3. 收集表單數據入庫操作

  1. 制作一個表單
  2. 通過$_POST收集信息
  3. 通過create()方法實現數據收集,該方法對於非法的字段會自動進行過濾

注意:一個add控制器實現兩個邏輯,一個是打出添加頁面,一個是向數據庫添加內容

通過一個例子來說明:

1. 在MainController.class.php控制器中寫一個方法來接收並向數據庫添加數據

 function All()
         {         
             if(empty($_POST))
             {
                 $nation=M("nation");
                 $attr=$nation->select();
                 $this->assign("shuju",$attr);
                 $this->display();                
                }
             else
             {
                 $model=D("Info");
                 $model->create();//自動收集表單數據入庫
                 $model->Sex=$_POST["Sex"]=="1"?true:false;                             
                 $r=$model->add();
                 if($r)
                 {
                     //添加成功跳轉頁面
                     $this->success("添加數據成功!","Add",5);//5代表跳轉時間,默認是3秒
                     }
                 else
                 {
                     //添加失敗跳轉頁面
                     $this->error("添加數據失敗!","Add",5);
                     }                
         }

2.在View\Main中新建:ShowAll.html 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
<!--自動收集表單數據入庫操作 -->
<!--注意大小寫和數據庫中的列名一致 -->
<h2>添加數據</h2>
<form action="__ACTION__" method="post">
<div>代號:<input type="text" name="Code" /></div>
<div>姓名:<input type="text" name="Name" /></div>
<div>性別:<input type="radio" name="Sex" value="1" /><input type="radio" name="Sex" value="0" /></div>
<div>民族:
    <select name="Nation">
        <foreach name="shuju" item="v">
                <option value="<{$v.code}>"><{$v.name}></option>
        </foreach>
    </select>
</div>
<div>生日:<input type="text" name="Birthday" /></div>
<input type="submit" value="提交" />

</form>
</body>
</html>

 

 

3.運行結果:

若添加成功:

     ==>          ==>

 

若添加不成功:

      ==>       

 

 

 

注意:如果是主鍵值重復,這種錯誤會導致error()方法不跳轉頁面直接拋出錯誤信息,這是新版本問題,如果想要跳轉,找到

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM