<%@LANGUAGE="VBSCRIPT" CODEPAGE="950"%> Untitled Document
課程107:MySQL 與 PHP 的結合
摘要:
在之前的課程中,我們已經討論了如何建立與刪除 MySQL裡面的資料庫與資料表,也提到了如何匯入資料,以及備份及還原資料庫。現在,我們的資料庫裡面,也有了資料。所以,在這個課程當中,我們將學習,如何使用 PHP 來讀取資料庫中的資料。

存取資料庫的步驟

說明:

在這節裡面,我們將討論使用 PHP 存取資料庫的步驟,及各步驟所使用的函式。存取資料庫的步驟,列示如下:

  1. 連接資料庫
  2. 選擇資料庫
  3. 執行查詢
  4. 處理查詢結果 [選用:當查詢的類型是 SELECT時使用]
  5. 關閉資料庫[選用]


一、連接資料庫

說明:

在連接資料庫時,我們使用以下的函式:

resource mysql_connect ([string server [, string username [, string password]]])

resource mysql_pconnect ([string server [, string username [, string password]]])

函式執行成功時,會傳回一個 MySQL link 的辨識資源,執行失敗則傳回 FALSE。

函式的參數:

  1. 主機名稱或位址
  2. 使用者的帳號
  3. 使用者的密碼

使用 mysql_pconnect()函式會開啟持續性的資料庫連接,執行這個函式時,函式會先從現有的持續性連接中,找出有沒有同樣主機、使用者帳號、密碼相同的資料庫連接,有的話,就直接傳回連接的資源而不會重新產生新的連接。其次,使用 mysql_pconnect()函式時,無須關閉資料庫的連接。在有同時使用同樣資料庫連接的情況下,使用 mysql_pconnect()可以節省系統資源,以及每次重新開啟資料庫連接的時間。

 

程式範例:
<?php
     $link = mysql_pconnect("localhost", "username", "secret") 
                              or die("Could not connect");
     print ("Connected successfully");
?>
二、選擇資料庫

說明:

取得資料庫連接之後,接下來便是選擇程式所要選取的資料庫。選擇資料庫的函式如下:

bool mysql_select_db (string database_name [, resource link_identifier])

函式執行成功,會傳回 True 值,否則傳回 False 值。

函式的參數:

  1. 資料庫名稱
  2. MySQL link 的辨識資源

通常第二個參數可以省略。


程式範例:
<?php 
     $link = mysql_pconnect("localhost", "username", "secret") 
                 or die("Could not connect"); 
     mysql_select_db("lib13") 
                or die("Could not select database lib13");
?>

三、執行查詢

說明:

資料庫選擇完畢之後,便可以針對資料庫執行查詢的動作。以下是執行查詢所使用的函式:

resource mysql_query (string query [, resource link_identifier])

函式接受 SQL 命令,作為對資料庫執行查詢的命令。如果 SQL 命令是 SELECT類型,執行成功時,就會傳回資源辯識物件,作為之後處理查詢結果之用;否則,則傳回 False 值。其他類型的 SQL 命令,執行成功,會傳回 True 值,否則傳回 False 值。

函式的參數:

  1. SQL 命令句
  2. MySQL link 的辨識資源

通常第二個參數可以省略。


程式範例:
<?php 
     $link = mysql_pconnect("localhost", "username", "secret") 
                      or die("Could not connect"); 
     mysql_select_db("lib13") 
                     or die("Could not select database lib13");
     $sql = "SELECT * FROM Guestbook";
     $result = mysql_query($sql) 
                   or die("invalid query");
?>

四、處理查詢結果

說明:

如果,之前所執行的查詢是 SELECT 類型,會傳回查詢結果。我們通常會利用執行查詢所得的資源物件,取得查詢結果,並逐筆處理其中的每一筆記錄。最常用的方式,是使用迴圈逐一執行 mysql_fetch_array()函式,然後將每一筆記錄放入陣列中,再讀取每一筆記錄,各欄位的值。

array mysql_fetch_array (resource result [, int result_type])

函式執行成功時,傳回一筆記錄,並將紀錄放入陣列中。如果,查詢結果中,不再有任何紀錄時,則傳回 False 值。

函式的參數:

  1. 查詢結果的資源辯識物件
  2. 陣列的型態常數

陣列的型態常數,是一個整數的常數。它的值有以下三種:MYSQL_ASSOC、MYSQL_NUM、及MYSQL_BOTH。預設值是 MYSQL_BOTH。當第二個參數是MYSQL_ASSOC 時,函式會將紀錄存成使用文字指數的陣列。當第二個參數是MYSQL_NUM時,函式會將紀錄存成使用數值指數的陣列。當第二個參數是MYSQL_BOTH 時,函式會將紀錄存成可同時使用文字指數及數值指數的陣列。

 

程式範例:
<?php 
     $link = mysql_pconnect("localhost", "username", "secret") 
                                or die("Could not connect"); 
     mysql_select_db("lib13") 
                                or die("Could not select database lib13");
     $sql = "SELECT * FROM Guestbook";
     $result = mysql_query($sql) or die("invalid query");
     while($record=mysql_fetch_array($result)){
          echo "id: $record[0]<br>";
          echo "name: ".$record["name"]."<br>";
     }
?>

五、關閉資料庫

說明:

如果,之前連接資料庫時,所使用的函式,是 mysql_connect(),則可以使用 mysql_close()函式來關閉資料庫的連接。若使用 mysql_pconnect(),則可省略這個步驟。不過,通常,在 PHP程式執行完畢時,會自動關閉資料庫的連接,所以不執行這個函式,也無所謂。

bool mysql_close ([resource link_identifier])

函式執行成功時,傳回 True 值。否則,則傳回 False 值。

函式的參數:

  1. MySQL link 的辨識資源

參數通常可省略。



綜合實作

說明:

在這個實作中,我們撰寫 PHP 程式,使用mysql的各種函式,將Guestbook資料表中的所有紀錄列印出來。

<?php
$link = mysql_pconnect("localhost", "lib13", "mypassword") or die("Could not connect");
mysql_select_db("lib13") or die("Could not select database lib13");
$sql = "SELECT * FROM Guestbook";
$result = mysql_query($sql) or die("invalid query");
while($record=mysql_fetch_array($result, MYSQL_NUM)){
for($i = 0; $i < count($record); $i++){
echo mysql_field_name($result, $i). ": ".nl2br($record[$i])."<br>";
}
echo "<hr>";
}
?>
程式執行結果

習題:
  1. 修改以上的程式,列出所有留言,將每一則留言以單一Table排列出來,參考以下的格式,設計每則留言的Table。

    content的儲存格高度為 120 pixel。
    email和web有值時,應分別顯示圖示;否則為空白,即&nbsp;。
    點選Email的圖示時,可以開啟 Email 軟體,寫信給留言者。
    點選web的圖示時,可以開啟新的瀏覽器視窗,瀏覽留言者所留的網址。
    一頁書:
    2002-11-02 16:56:38
    世事如棋,乾坤莫測,笑盡英雄。