thinkphp學習簡易教程(二) thinkphp連接讀取MySQL數據庫,thinkphpmysql
首先, 在本地服務器中新建項目APP,依據第一講中的步驟配置好thinkphp,這裡為了測試方便,不分前台和後台模塊,統一把模塊路徑設為'./APP/'。
1、新建數據庫myapp,以及數據庫表think_form;
2、在配置文件APP/Conf/config.php中寫入:
<?php
return array(
//'配置項'=>'配置值'
'DB_TYPE' => 'mysql', // 數據庫類型
'DB_HOST' => '127.0.0.1', // 服務器地址
'DB_NAME' => 'myapp', // 數據庫名
'DB_USER' => 'root', // 用戶名
'DB_PWD' => '', // 密碼
'DB_PORT' => '3306', // 端口
'DB_PREFIX' => 'think_', // 數據庫表前綴
);
?>
其中端口為字符串需要加引號,之前把3306看成int數據類型,結果一直搞不定;
3、在控制器APP/Lib/IndexAction.class.php中寫入:
<?php
// 本類由系統自動生成,僅供測試用途
class IndexAction extends Action {
public function index(){
$m=new Model('Form');
$arr=$m->select();
var_dump($arr[0]['title']);
}
}
?>
注:上面的語句具體解釋為:$m=new Model(數據庫表後綴名);後綴名首字母大小不限。注意只能是數據庫表後綴名,不能是完整的數據庫表名,否則讀取數據失敗,顯示數據為null。也可以采用$m=M(數據庫表後綴名);或者$m=D(數據庫表後綴名);
最後,在浏覽器中運行http://127.0.0.1/APP/index.php/Index/index,如果成功,即可看到數據字段的數據。
再注:之前連接時在入口文件內沒有加入define('APP_DEBUG', true);結果數據庫始終讀取失敗,而加了之後忽然成功了,再次注釋掉也可以讀取。難道說這一道程序是必須的?搞不懂情況?反正thinkphp操作超蛋疼。
4、上面的操作基本可以讀取數據庫了,但對於MVC要把控制器C和視圖V聯系,還需要再加一道工序:
(1)在控制器APP/Lib/IndexAction.class.php中加入:
$this->assign('data',$arr[0]['title']);
$this->display();//此方法為在視圖V中輸出顯示數據的必要條件。
(2)在APP/Tpl目錄中新建Index目錄(由於控制器中的類名為IndexAction ,此處必須為Index,如果要改成其他目錄名,首先要把IndexAction 的Index改成其他字符串),再在Index目錄下新建index.html,寫入HTML語句,加入{$data}變量(因為在控制器中通過assign方法為$data進行了定義和賦值,想分配變量可以使用assign方法)。
在浏覽器中運行http://127.0.0.1/APP/index.php/Index/index,如果成功,即可看到數據字段的數據。
總之,thinkphp連接數據庫超蛋疼!!記得加入define('APP_DEBUG', true);防止麻煩出現。
附1:
url的4種訪問方式 //重點!
1.PATHINFO 模式 -- 重點!!!!!! http://域名/項目名/入口文件/模塊名/方法名/鍵1/值1/鍵2/值2
2.普通模式
http://域名/項目名/入口文件?m=模塊名&a=方法名&鍵1=值1&鍵2=值2
3.REWRITE模式
http://域名/項目名/模塊名/方法名/鍵1/值1/鍵2/值2
4.兼容模式
http://域名/項目名/入口文件?s=模塊名/方法名/鍵1/值1/鍵2/值2
http://127.0.0.1/APP/index.php/Index/index為第一種。
附2:
控制器數據庫操作CURD命令:
增 -C Create $m->add()
刪 -D Delete $m->delete()
改 -U Update $m->save()
查 -R Read $m->select()
附3:
模型遍歷數組方法:
控制器的語句:public function index(){
$m=new Model('Form'); //$m=new Model(數據庫表後綴名);實例化模型
$arr=$m->select();
//var_dump($arr[0]['title']);
//$name='ken';
//$this->assign('data',$name);
$this->assign('data',$arr);
$this->display();
}
視圖V的語句:
<h1>
<volist name='data' id='vo'>
{$vo.id}<br>
{$vo.title}<br>
</volist>
</h1>
<volist>標簽是模型遍歷數組的關鍵,屬性name為控制器中接收過來的後台變量,id為前台輸出的實例對象變量。