作者 主題: 分享PEAR::DB使用---part2  (閱讀 6180 次)

0 會員 與 1 訪客 正在閱讀本文。

ricky

  • 實習板主
  • 鑽研的研究生
  • *****
  • 文章數: 669
    • 檢視個人資料
    • Ricky 碎碎唸
分享PEAR::DB使用---part2
« 於: 2005-06-17 14:41 »
接下來我們來看看如何從資料庫送出一筆查詢
    <?php
    require_once('DB.php');
    $DSN=".....";
    $dbObj=& DB::connect($DSN);
    if (PEAR::isError($dbObj)) die($dbObj->getMessage());
    $Result=$dbObj->query('select * from test;');
    if (PEAR::isError($Result)) die($Result->getMessage());
    echo "table test has ".$Result->numCols." Columns";
    for($i=0;$i<$Result->numRows();$i++)
    {
      $DataRows=$Result->fetchRow(DB_FETCHMODE_ASSOC);
      print_r($DataRows);
    }
    $Result->free();
    $dbObj->disconnect();
    ?>

當我們成功建立了一個資料庫聯結物件後就可以開始跟資料庫進行查詢或是更動資料
我們可以透過query這個成員函數送出SQL查詢指令
代碼: [選擇]

$Result=$dbObj->query('select c1,c2,c3,c4,c5 from test;');

送出後我們會得到一個$Result的查詢結果
這邊我們使用了PEAR的錯誤機制去偵測我們送出的查詢結果是否成功
如果失敗了就列出錯誤訊息結束
代碼: [選擇]

if (PEAR::isError($Result)) die($Result->getMessage());

接下來我們就把重點擺在$Result物件的幾個相關功能上

DB_result::numCols()
用來取得每列資料欄位的數目

DB_result::numRows()  
用來取得符合條件的資料列數

DB_result::fetchRow()  
從查詢結果中取得一列資料
如果總資料筆數有三筆
第一次呼叫函數就是取得第一筆
再次呼叫就取得下一筆依此類推
所以要把全部三筆資料通通取出就得呼叫三次
fetchRow有一個選擇性的參數
DB_FETCHMODE_ORDERED 將傳回資料依序擺入array (預設方式)
DB_FETCHMODE_ASSOC     將資料擺入associative array
DB_FETCHMODE_OBJECT    將資料封裝成物件
我們先從ORDERED跟ASSOC說起好了
何謂associative array
像這樣array('Ricky' => 'M','Jean' => 'F','John' => 'M')
存取array的索引值使用的是一個"名稱" $a['Rciky'],$a['Jean']
而array('M','F','M');這就是一個ordered array
$a[0],$a[1],$a[2]
OBJECT 則是封裝成物件
像這樣$a->xxx...
以上面程式的例子來說
DB_FETCHMODE_ORDERED 得到結果會像這樣  
代碼: [選擇]

Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
)


DB_FETCHMODE_ASSOC 得到結果會像這樣
代碼: [選擇]

Array
(
    [c1] => 0
    [c2] => 1
    [c3] => 2
    [c4] => 3
    [c5] => 4
)


DB_FETCHMODE_OBJECT 得到結果會像這樣
代碼: [選擇]

Object
(
    [c1] => 0
    [c2] => 1
    [c3] => 2
    [c4] => 3
    [c5] => 4
)

至於該怎麼用就看個人需求嘍

最後老話一句
$Result->free();
別忘了資源回收
不用了記得把東西給歸還吧

待續
我的symfony作品:YOMOpets 寵物誌
有興趣可以一起來討論symfony喔
我的部落格:http://ricky.ez2.us/