TP框架对数据库的基本操作
數據庫的操作,無疑就是連接數據庫,然后對數據庫中的表進行各種查詢,然后就是對數據的增刪改的操作,一步步的講述一下框架對數據庫的操作
想要操作數據庫,第一步必然是要:鏈接數據庫
一、鏈接數據庫
(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)添加一下內容,數據庫表中沒有的數據,單擊提交按鈕
?
//先收集
$n->Name = "hhah";??? //修改名字這個吧 $n->add();?? //再添加到數據庫看下運行效果:
先收集表單,單擊提交按鈕
?
?
?
?
五、修改數據庫中表的數據(方法:save())
其實這個和添加差不多,也是有三種方法
這里也是在HomeController.class文件中繼續編寫修改方法
| 1 2 3 4 5 | public function xiugai() {<br> $code = "n009";? //修改數據當然是用到的主鍵值 ????$n = M("nation");?? //因為要修改數據,所以要用到數據庫,這里調用數據 //下面就是修改的方法 }? |
(1)1.還是用if判斷一下
?
| 1 2 3 4 5 6 7 | if(empty($_POST)) { $arrt = $n->find($code);?? //利用find()方式讀取一條數據,里面的參數自然就是主鍵 ?? $this->assign("shuju",$arrt);? //注入變量了,注意這里是$this不是別的 $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的這條數據已經被刪除了
?
到現在對于數據庫的修改數據就已經完事了,正常的增刪改功能就這么些內容
需要記住:注意事項
添加修改都是三種方式,還是同樣的方式(方法不同而已)
?
上面都是有關數據庫的基本操作,查詢,增刪改操作,想要操作數據庫,第一點就是要連接數據庫!!
?
轉載于:https://www.cnblogs.com/Liangbingbing/p/7147850.html
總結
以上是生活随笔為你收集整理的TP框架对数据库的基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 制作wordpress页面的学习记录
- 下一篇: linux cmake编译源码,linu