框架有時會用到數據庫的內容,在"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的這條數據已經被刪除了
到現在對于數據庫的修改數據就已經完事了,正常的增刪改功能就這么些內容
需要記住:注意事項
添加修改都是三種方式,還是同樣的方式(方法不同而已)
上面都是有關數據庫的基本操作,查詢,增刪改操作,想要操作數據庫,第一點就是要連接數據庫!!
文章列表
留言列表