| 課程107:MySQL 與 PHP 的結合 |
摘要:
在之前的課程中,我們已經討論了如何建立與刪除 MySQL裡面的資料庫與資料表,也提到了如何匯入資料,以及備份及還原資料庫。現在,我們的資料庫裡面,也有了資料。所以,在這個課程當中,我們將學習,如何使用
PHP 來讀取資料庫中的資料。 |
存取資料庫的步驟
|
說明:
在這節裡面,我們將討論使用 PHP 存取資料庫的步驟,及各步驟所使用的函式。存取資料庫的步驟,列示如下:
- 連接資料庫
- 選擇資料庫
- 執行查詢
- 處理查詢結果 [選用:當查詢的類型是 SELECT時使用]
- 關閉資料庫[選用]
|
| 一、連接資料庫 |
說明:
在連接資料庫時,我們使用以下的函式:
resource mysql_connect ([string server [, string username [, string
password]]])
resource mysql_pconnect ([string server [, string username [, string
password]]])
函式執行成功時,會傳回一個 MySQL link 的辨識資源,執行失敗則傳回 FALSE。
函式的參數:
- 主機名稱或位址
- 使用者的帳號
- 使用者的密碼
使用 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 值。
函式的參數:
-
資料庫名稱
-
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 值。
函式的參數:
-
SQL 命令句
-
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 值。
函式的參數:
- 查詢結果的資源辯識物件
- 陣列的型態常數
陣列的型態常數,是一個整數的常數。它的值有以下三種: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 值。
函式的參數:
- 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>"; } ?> |
| 程式執行結果 |
習題:
|
- 修改以上的程式,列出所有留言,將每一則留言以單一Table排列出來,參考以下的格式,設計每則留言的Table。
content的儲存格高度為 120 pixel。
email和web有值時,應分別顯示圖示 和 ;否則為空白,即 。
點選Email的圖示時,可以開啟 Email 軟體,寫信給留言者。
點選web的圖示時,可以開啟新的瀏覽器視窗,瀏覽留言者所留的網址。
| 一頁書: |
|
|
2002-11-02
16:56:38 |
| 世事如棋,乾坤莫測,笑盡英雄。 |
|