文章出處

框架有時會用到數據庫的內容,在"ThinkPhp框架知識"的那篇隨筆中提到過,現在這篇隨筆詳細的描述下。

數據庫的操作,無疑就是連接數據庫,然后對數據庫中的表進行各種查詢,然后就是對數據的增刪改的操作,一步步的講述一下框架對數據庫的操作

想要操作數據庫,第一步必然是要:鏈接數據庫

一、鏈接數據庫

(1)找到模塊文件夾中的Conf文件夾,然后進行編寫config.php文件

我這里是這樣的文件路徑

(2)打開這個config.php文件,然后找到父類配置文件convention.php文件,將關于"數據庫"的部分復制粘貼到config.php配置文件中

1
2
3
4
5
6
7
8
9
/* 數據庫設置 */
   'DB_TYPE'               =>  '',     // 數據庫類型
   'DB_HOST'               =>  ''// 服務器地址
   'DB_NAME'               =>  '',          // 數據庫名
   'DB_USER'               =>  '',      // 用戶名
   'DB_PWD'                =>  '',          // 密碼
   'DB_PORT'               =>  '',        // 端口
   'DB_PREFIX'             =>  '',    // 數據庫表前綴
   'DB_FIELDS_CACHE'       =>  true,        // 啟用字段緩存(開發時這個要寫成false)

下面是我的數據庫連接內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
    return array(
    //'配置項'=>'配置值'
     
    /* 數據庫設置 */
    'DB_TYPE'               =>  'mysql',     // 數據庫類型
      'DB_HOST'               =>  'localhost'// 服務器地址
      'DB_NAME'               =>  'test3',          // 數據庫名
      'DB_USER'               =>  'root',      // 用戶名
      'DB_PWD'                =>  '123',          // 密碼
      'DB_PORT'               =>  '3306',        // 端口
      'DB_PREFIX'             =>  '',       // 數據庫表前綴
    'DB_FIELDS_CACHE'       =>  false,    // 啟用字段緩存(開發時這個要是false)
);

連接成功后,然后就是新建模型文件了

 

二、新建模型文件(具體內容看ThinkPhp框架知識)

(1)找到模塊文件夾中的Model文件夾,然后在這個文件夾新建模型文件

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

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

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

自己的模型文件

1
2
3
4
5
6
7
<?php
namespace Home\Model;   //命名空間的寫法
use Think\Model;          //使用模型
class InfoModel extends Model
{
     
}

 (2)看下這個數據模型

我們可以再控制器文件夾中進行編寫控制文件,這里有了一個控制文件,我就用這個了

打開控制文件,然后寫個方法,這里叫做ceshi()

1
2
3
4
5
6
public function ceshi()
{
  $info new \Home\Model\InfoModel();  //造新對象,這里是Info模型
  var_dump($info);  //輸出一下,看下結果
         
}

輸出看一下結果,注意這里地址欄的寫法(在框架知識中已經介紹過了4中訪問方式了):

這是我的路徑:     

下面是對應的模型數據:

 

 三、對數據庫進行各種查詢(下面的是ThinkPHP模型基礎類提供的“連貫操作方法”連貫操作方法)

可以利用這個控制文件中的方法,就直接在這個方法中寫了

1
2
3
4
5
6
public function ceshi()
{
  $info new \Home\Model\InfoModel();  //造新對象,這里是Info模型
  //下面是數據庫操作
         
}

 

(1)查詢表中的所有數據(方法:select())

返回的二維數組(關聯的)
返回的數據其中的字段名稱是小寫,這樣做數據庫時盡量是小寫的

例如:

1
2
$arr $info->select();
var_dump($arr);

看下是不是查詢的數據庫中所有內容

   

數據庫中的內容:

   

 

(2)查詢一條數據(方法:find())

 例如:

1
$arr $info->find("p002");<br>var_dump($arr);

這是查詢的:代號是"p002"的信息,如下:

select()方法也是可以查詢一條或是多條數據,如下:

1
2
$arr $info->select("p001,p002");
var_dump($arr);

這是查詢的:代號是"p001"和"p002"的信息,如下:

 

(3)條件查詢數據(方法:where())

1
$arr $info->where("code='p003'")->select();<br>var_dump($arr);  

 這是查詢的條件:代號是p003的所有信息

 

(4)切換數據表(方法:table())

例如:

1
$arr $info->table("nation")->select();<br>var_dump($arr);

這是卻換了一張nation表:

 

(5)選擇操作的字段(方法:field())

例如:

1
$arr $info->field("name,sex,birthday")->select();<br>var_dump($arr);

查詢字段是:姓名、性別和生日的字段

 

(6)對數據進行排序(方法:order())

例如:

1
2
$arr $info->order("code desc")->select();
var_dump($arr);

這是對code進行降序排列

 

(7)分頁查詢數據(方法:limit()和page())

例如:limit()

1
2
$arr $info->limit("2,2")->select();
var_dump($arr);

這是顯示的第2頁的內容:

例如:page()

1
2
$arr $info->page("2,2")->select();
var_dump($arr);

這個也是顯示的第2頁的內容:

注意:

limit()和page()的不同之處:后者的參數是直接顯示“第幾頁”,“幾條”

 

(8)對數據進行分組(方法:table())

例如:

1
2
$arr $info->table("car")->field("max(price)")->group("brand")->select();
var_dump($arr);

這是查詢的car表中的最大價格,并且根據brand的字段進行分組

例如:

1
2
$arr $info->table("car")->field("max(price)")->group("brand")->having("max(price)>60")->select();
var_dump($arr);

這是上面的那個查詢,但是加了一個條件就是價格大于60的

 

(9)鏈接查詢數據庫(方法:join())

例如:

1
2
$arr $info->field("info.code as '代號', info.name as '姓名',nation.name as '民族'")->join("nation on info.nation=nation.code")->select();
var_dump($arr);

這是鏈接查詢的兩張表(漢語的地方最后用字符,因為后面要用到他的值)

 

(10)去重(distinct())

例如:

1
2
$arr $info->table("car")->distinct(true)->field("brand")->select();
var_dump($arr);

這是查詢的數據庫中重復的字段

 

到此,就是關于怎么連接數據庫和各種查詢數據庫中的數據,這是基本操作,下面就是對數據的添加、修改、刪除操作了

 

四、對數據表添加數據(方法:add())

(1)上一篇已經講過鏈接數據庫了,繼續進行對數據庫的操作,還是用控制器文件中的HomeController.class文件

看下數據庫表中的現有數據,然后在進行添加數據

添加數據有三種方法

其中第一種和第二種的添加數據方法不用判斷語句,直接找到表然后進行編寫就可以

1
2
3
4
public function tianjia()
{
    $n = M("nation");   <br>  //下面就是第一種和第二種添加的方式
}      

1.使用數組方式添加

1
2
3
4
//1.使用數組方式添加
$arr array("Code"=>"n006","Name"=>"哈嘍");  //其中的字段名要和數據庫中的要保持一致
$n->add($arr);  //進行添加數據,方法add()
        

運行一下這個方法,注意地址欄要使用正確的路徑(這是我的路徑):http://localhost/tp/index.php/Home/Home/tianjia 

看下數據庫表中是否添加了數據

 

2.AR方式

賦一下值(給字段賦值然后在添加)

1
2
3
4
//2.AP方式
$n->Code = "n007";  //賦值的方式將每個字段賦值
$n->Name = "你好";
$n->add();  //最后用添加方法的時候里面就不用寫參數了

運行看下數據庫表中的變化

 

3.自動收集表單(最簡單的方式)

注意事項:
(1)表單中的name要和數據庫中的字段名統一
(2)多余的表單可以自動取名,只要不和數據庫字段名一樣就可以

就要考慮這個操作方法要實現什么邏輯,要是兩個邏輯

1.顯示頁面
2.添加數據

這里可以通過if判斷語句來實現:如果是空的,就顯示頁面

1
2
3
4
if(empty($_POST))
{
    $this->show();     //顯示頁面
}

否則就是添加數據的代碼,一步步的來,先說顯示頁面,既然是顯示頁面就要在視圖文件夾添加顯示頁面了

  1.1.打開View文件夾,然后新建文件夾,名字和控制器的名字一樣

  1.2.然后在Home文件夾中新建一個顯示頁面,這里我叫的是tianjia.html,打開這個頁面,進行編寫要顯示的內容

這里我是用的表單元素來寫的顯示頁面

1
2
3
4
5
6
<form action="__ACTION__" method="post">  <!--這個中的ation屬性使用的__ACTION__(當前操作方法),也可以使用__SELF__(自身的操作方法)系統常量--><br>  <!--注意下面的name名字要和數據中的保持一致-->
    <div>代號:<input type="text" name="Code" /></div>
    <br />
    <div>名稱:<input type="text" name="Name" /></div>
    <input type="submit" value="添加" />
</form>

注意:

這樣,我們訪問一下,看看是不是能夠看到這個頁面  

打開瀏覽器,在地址欄中輸入訪問方法

http://localhost/tp/index.php/Home/Home/tianjia

看下這個頁面的顯示效果

顯示頁面成功后就是添加數據的編寫了

  2.1這個就是判斷中的“否則”的語句了

1
2
3
4
5
6
else
{
    $n = M("nation");  
    $n->create();   //自動收集表單數據
    $n->add();  //添加到數據庫中
}          

運行一下看下是不是可以自動收集表單內容

(1)第一步還沒有內容時,自然是顯示頁面了

(2)添加一下內容,數據庫表中沒有的數據,單擊提交按鈕

(3)看下數據庫是不是已經添加進去了

 

如果是添加錯誤想要修改數據,可以這樣

先收集表單元素,然后覺得哪一項不對,找到這一項然后修改就可以了

1
2
3
$n->create();   //先收集
$n->Name = "hhah";    //修改名字這個吧
$n->add();   //再添加到數據庫

看下運行效果:

先收集表單,單擊提交按鈕

在看修改的內容,是修改名稱這個改為hhah,看下數據庫是不是在提交時修改了名稱,是的,他修改了

 

五、修改數據庫中表的數據(方法:save())

其實這個和添加差不多,也是有三種方法

這里也是在HomeController.class文件中繼續編寫修改方法

1
2
3
4
5
public function xiugai()
{<br>  $code "n009";  //修改數據當然是用到的主鍵值
    $n = M("nation");   //因為要修改數據,所以要用到數據庫,這里調用數據
  //下面就是修改的方法
}  

(1)1.還是用if判斷一下

1
2
3
if(empty($_POST))
{<br>  $arrt $n->find($code);   //利用find()方式讀取一條數據,里面的參數自然就是主鍵<br>  $this->assign("shuju",$arrt);  //注入變量了,注意這里是$this不是別的<br>  $this->show();      //顯示頁面
}

2.接下來就是做修改的模板頁面了,名字就叫xiugai.html吧

1
2
3
4
5
6
<form action="__ACTION__" method="post">
    <div>代號:<input type="text" name="Code" value="{$shuju.code}"/></div>   <!--顯示的默認值就是上面的二維數組中的shuju-->
    <br />
    <div>名稱:<input type="text" name="Name" value="{$shuju.name}" /></div>
    <input type="submit" value="修改" />
</form>

看下結果

(2)這個就是修改的“否則”語句了

修改也是有三種方式

1.數組方式

1
2
//1.數組方式
$n->save($_POST);  //修改方法save()

因為已經有了數組,所以直接調用就可以了  

2.AR方式

1
2
3
4
//2.AR方式
$n->Code = $_POST["Code"];
$n->Name = $_POST["Name"];
$n->save();

 

3.自動收集表單

1
2
3
//3.自動收集表單
$n->create();   //自動收集表單數據
$n->save();

  3.1修改一下數據試試

  3.2將上面的值修改為下圖所示,然后單擊“修改”按鈕

  3.3看下數據庫是不是修改了,原來是hhah,修改為:維吾爾族

修改成功了~~

 

六、刪除數據庫表中的數據(方法:delete())

同樣的繼續寫一個方法,這里就叫shanchu()吧

1
2
3
4
5
public function shanChu()
{
    $n = M("nation");
    $n->delete("n008");  //刪除的是n008的數據,刪除的方法:delete()
}

看下數據庫這個n008的數據  

執行一下這個方法,然后看下數據庫中的數據

n008的這條數據已經被刪除了

 

到現在對于數據庫的修改數據就已經完事了,正常的增刪改功能就這么些內容

需要記住:注意事項

添加修改都是三種方式,還是同樣的方式(方法不同而已)

 

上面都是有關數據庫的基本操作,查詢,增刪改操作,想要操作數據庫,第一點就是要連接數據庫!!


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜

    大師兄 發表在 痞客邦 留言(0) 人氣()