pear mdb2 使用教學 資料庫連結

pear mdb2是整合原有db函式後的新類別庫(pear db已不再維護更新),而兩者的差別據官網所述,mdb2提供一些選擇性的特色,讓它建構出的SQL敘述對各資料庫系統有較好的可攜性portable。
pear mdb2 使用教學 資料庫連結

如果和我一樣是自己手動安裝的話,除了要裝mdb2的libiary外,記得還要裝資料庫的driver:
1. 下載MDB2
2. 下載MDB2_Driver_mysql
3. 兩者解壓後,整合到一個資料夾
(可下載我整合好的mdb2,省略上述;如果需要mssql、oracle、postgrel,可至官網搜尋並下載driver
4. 上傳至pear的資料夾(路徑自行決定,不贅述)


來個簡單的資料庫連接範例吧:

require_once('MDB2.php');
setDBOpen();

//要進行資料庫操作的程式...後續介紹
//dbconn->query("...");
//dbconn->queryOne("...");
//dbconn->queryRow("...");
//dbconn->queryAll("...");
//dbconn->exec("...");

setDBClose();

//自行撰寫的資料庫連接函式
function setDBOpen() {
  $GLOBALS['dbconn'] = &MDB2::connect(array('phptype'=>'mysql','hostspec'=>'localhost','database'=>'hello','username'=>'hello','password'=>'hello','charset'=>'utf8'));
	if(!PEAR::isError($GLOBALS['dbconn'])) {
    $GLOBALS['dbconn']->setFetchMode(MDB2_FETCHMODE_ASSOC);   
    $GLOBALS['dbconn']->setOption('portability',MDB2_PORTABILITY_NONE);   
	} else {
 	  die('error!');
               //如果要顯示詳細的錯誤訊息,就改用下述
 	  //die($GLOBALS['dbconn']->getMessage().','.$GLOBALS['dbconn']->getDebugInfo());
  }	
}

//自行撰寫的資料庫斷線函式
function setDBClose() {
  if (is_object($GLOBALS['dbconn'])) $GLOBALS['dbconn']->disconnect();
}

重點說明:
資料庫連線有三種模式:

&MDB2::connect 建立MDB2物件並連線資料庫
&MDB2::factory 建立MDB2物件,但等到要進行資料庫操作時才連線
&MDB2::singleton 同factory,但它保證只有一個MDB2物件連線到資料庫

用哪個模式看需求,如果和我一樣每次資料庫連線就要進行操作的話,用connect就可以了

setFetchMode有三種屬性(query出來值的呈現方式):

MDB2_FETCHMODE_ORDERED(例:$result[0])
MDB2_FETCHMODE_ASSOC(例:$result[‘name’])
MDB2_FETCHMODE_OBJECT(例:$result->name)

option有幾個項目,當中特別要說明的是portability,如果沒有加上MDB2_PORTABILITY_NONE,query出來的結果一律以小寫表示,比方說:

$test = dbconn->queryRow("select ABC,DEF from hello where ID = 1");
echo $test['abc']; //正確
echo $test['ABC']; //錯誤

官網說為了各資料庫的相容性,所以預設是以小寫表示,如果真的不需要,就用MDB2_PORTABILITY_NONE把它關掉

參考文(MDB2 | DB-2-MDB2

您可能也會喜歡…

1 個回應

  1. Monster表示:

    您好,很感謝您分享的資訊,有個問題想請教。
    我在測試機上開發網頁,用的資料庫是mysql,且能正常執行,
    但是由於正式上線的伺服器資料庫是MS SQL,是否只要將網路上所下載的MDB2_MSSQL_Driver 裡面不同資料夾內共六個mssql.php檔案複製到對應的資料夾就好了?
    我目前是只將檔案複製過去,但一直出現MDB2 Error: connect failed i及 connect: [Error message: unable to establish a connection] 的錯誤訊息,不好意思,請問這會是狀況導致呢?謝謝你!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *