看到你前面幾段寫的就知道你是玩Java的。Java主要用Spring來實現主要的解耦功能。
站在用戶的角度思考問題,與客戶深入溝通,找到博興網站設計與博興網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創造個性化、用戶體驗好的作品,建站類型包括:網站制作、網站建設、企業官網、英文網站、手機端網站、網站推廣、域名注冊、虛擬空間、企業郵箱。業務覆蓋博興地區。
PHP這里的框架很少,而且PHP也沒有那么靈活的反射機制等吧。所以如果要用PHP來實現高內聚低耦合,有點難度,除非你自己搞框架。
我看discuz論壇都沒有用那么復雜的技術,而且我個人覺得PHP用MVC來分,分個controller,實在沒有必要。
如果樓主用了很復雜的業務邏輯,為何不用Java來做業務中心,PHP做前端,使用Java的WebService來暴露數據呢?
個人拙見,一起探討。
ThinkPHP內置了抽象數據庫訪問層,把不同的數據庫操作封裝起來,我們只需要使用公共的Db類進行操作,而無需針對不同的數據庫寫不同的代碼和底層實現,Db類會自動調用相應的數據庫驅動來處理。目前的數據庫包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括對PDO的支持,如果應用需要使用數據庫,必須配置數據庫連接信息,數據庫的配置文件有多種定義方式。
常用的配置方式是在項目配置文件中添加下面的參數:
?php
//項目配置文件
return array(
//數據庫配置信息
'DB_TYPE' = 'mysql', // 數據庫類型
'DB_HOST' = 'localhost', // 服務器地址
'DB_NAME' = 'thinkphp', // 數據庫名
'DB_USER' = 'root', // 用戶名
'DB_PWD' = '', // 密碼
'DB_PORT' = 3306, // 端口
'DB_PREFIX' = 'think_', // 數據庫表前綴
//其他項目配置參數
// ...
);
或者采用如下配置
'DB_DSN' = 'mysql://username:password@localhost:3306/DbName'
使用DB_DSN方式定義可以簡化配置參數,DSN參數格式為:
數據庫類型://用戶名:密碼@數據庫地址:數據庫端口/數據庫名
如果兩種配置參數同時存在的話,DB_DSN配置參數優先。
注意:如果要設置分布式數據庫,暫時不支持DB_DSN方式配置。1
如果采用PDO驅動的話,則必須首先配置DB_TYPE 為pdo,然后還需要單獨配置其他參數,例如:
//PDO連接方式
'DB_TYPE' = 'pdo', // 數據庫類型
'DB_USER' = 'root', // 用戶名
'DB_PWD' = '', // 密碼
'DB_PREFIX' = 'think_', // 數據庫表前綴
'DB_DSN' = 'mysql:host=localhost;dbname=thinkphp;charset=UTF-8'
注意:PDO方式的DB_DSN配置格式有所區別,根據不同的數據庫類型設置有所不同。
配置文件定義的數據庫連接信息一般是系統默認采用的,因為一般一個項目的數據庫訪問配置是相同的。該方法系統在連接數據庫的時候會自動獲取,無需手動連接。
可以對每個項目和不同的分組定義不同的數據庫連接信息,如果開啟了調試模式的話,還可以在不同的應用狀態的配置文件里面定義獨立的數據庫配置信息。1
第二種 在模型類里面定義connection屬性
如果在某個模型類里面定義了connection屬性的話,則實例化該自定義模型的時候會采用定義的數據庫連接信息,而不是配置文件中設置的默認連接信息,通常用于某些數據表位于當前數據庫連接之外的其它數據庫,例如:
//在模型里單獨設置數據庫連接信息
protected $connection = array(
'db_type' = 'mysql',
'db_user' = 'root',
'db_pwd' = '1234',
'db_host' = 'localhost',
'db_port' = '3306',
'db_name' = 'thinkphp'
);
也可以采用DSN方式定義,例如:
//或者使用DSN定義
protected $connection = 'mysql://root:1234@localhost:3306/thinkphp';
如果我們已經在配置文件中配置了額外的數據庫連接信息,例如:
//數據庫配置1
'DB_CONFIG1' = array(
'db_type' = 'mysql',
'db_user' = 'root',
'db_pwd' = '1234',
'db_host' = 'localhost',
'db_port' = '3306',
'db_name' = 'thinkphp'
),
//數據庫配置2
'DB_CONFIG2' = 'mysql://root:1234@localhost:3306/thinkphp';
那么,我們可以把模型類的屬性定義改為:
//調用配置文件中的數據庫配置1
protected $connection = 'DB_CONFIG1';
//調用配置文件中的數據庫配置2
protected $connection = 'DB_CONFIG2';
如果采用的是M方法實例化模型的話,也可以支持傳入不同的數據庫連接信息,例如:
$User = M('User','other_','mysql://root:1234@localhost/demo');
表示實例化User模型,連接的是demo數據庫的other_user表,采用的連接信息是第三個參數配置的。如果我們在項目配置文件中已經配置了DB_CONFIG2的話,也可以采用:
$User = M('User','other_','DB_CONFIG2');
如果你的個別數據表沒有定義任何前綴的話,可以在前綴參數中傳入NULL,例如:
$User = M('User',Null,'DB_CONFIG2');
表示實例化User模型,連接的是demo數據庫的user表。
需要注意的是,ThinkPHP的數據庫連接的惰性的,所以并不是在實例化的時候就連接數據庫,而是在有實際的數據操作的時候才會去連接數據庫(額外的情況是,在系統第一次實例化模型的時候,會自動連接數據庫獲取相關模型類對應的數據表的字段信息)。
測試代碼如下:?php/**************************@Filename: pdotest.php@Content : PDO操作MySQL,Access(測試)**************************/if($_GET['db'] == 'mysql'){ $dns = 'mysql:host=localhost;dbname=test'; $dbuser = 'root'; $dbpass = 'root'; $db = new PDO($dns,$dbuser,$dbpass);}else{ $db = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=".getcwd()."http://test.mdb");}if($_POST['reg']){ $db-exec("INSERT INTO t_user (name,email) VALUES ('".$_POST['name']."','".$_POST['email']."') ;"); // header('Location:'.$_SERVER['PHP_SELF']); ? a href="pdotest.php"返回/a ?}else{ $html = 'div id="new" form action="'.$_SERVER['REQUEST_URI'].'" method="post" Name: input type="text" name="name" size="10" / Email: input type="text" name="email" size="15" / input type="submit" name="reg" value="Register" / /form/div'; $re = $db-query("SELECT uid,name,email FROM t_user ORDER BY email ;"); while($rs = $re-fetch()) { $userlisthtml .= 'trtd'.$rs['uid'].'/tdtd'.$rs['name'].'/tdtd'.$rs['email'].'/td/tr'; } $html .= 'div id="list" table border="1" captionUser List/caption thead trthID/ththName/ththEmail/th/tr /thead tbody'.$userlisthtml.' /tbody /table/div';}echo $html;?
分享標題:php數據庫層 php數據庫設計
本文來源:http://vcdvsql.cn/article14/ddoiede.html
成都網站建設公司_創新互聯,為您提供靜態網站、商城網站、小程序開發、虛擬主機、網站收錄、品牌網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯