資料庫程式設計 – PHP+MySQL :第 六章 SQL 語言與 PHP+MySQL   上一頁      下一頁

 

6-4 PHP 與 MySQL 連結

內容:

  • 6-4-1 PHP 與 MySQL 連結步驟

  • 6-4-2 範例研討:PHP 與 MySQL 連線

  • 6-4-3 範例研討:PHP 與資料庫連線

6-4-1 PHP 與 MySQL 連結步驟

交談式 SQL 命令大多應用在管理資料庫方面,要發展一套資料庫的應用管理系統,還是需要透過一般系統發展工具才行,這裡所要介紹的是利用 PHP 網頁發展工具,來結合 SQL 語言,成為一套完整的網頁資料庫發展系統。

簡單的說,我需要編寫 PHP 語言程式來存取資料庫,目前常用函數有: PHP-MySQL、PHP-MySQLi 與 PDO (PHP Data Object) 等三種套件。PDO 是屬於抽象式物件導向,利用它發展出來應用程式相容於其它資料庫。另外兩套件是 MySQL 專屬套件,並不相容於其他資料庫,但目前網路上還是以它最普遍,以它為範例介紹。

(A) Mysql 與 MySQLi 區別

1.        mysql 與 mysqli 兩者都是 PHP 的函數集,與 MySQL 資料庫關聯沒差異。

2.        PHP 5.0 版本採用 mysql 函數,以後版本兩者皆有,到了 PHP 7.0 以後便捨棄 mysql 函數。

3.        mysql 是非持續連線方式,每次連線都要開啟一個連線程序;mysqli 函數是持續連接方式,多次連線共用一個連線程式,如此可減低伺服器的負荷。

既然 PHP 7.0 以後版本不再提供 mysql 函數,吾人還是以 mysqli 為主要介紹對象,但它又有兩種套件格式:

1.        程序方式:如同一般函數呼叫方式。

2.        物件導向方式:具有繼承性、多形性、、等等物件導向的功能。

兩者在編寫程式上有很大差別,吾人為了降低程學習門檻,僅介紹『程序方式』,至於物件導向設計,等讀者孰悉『資料庫程式設計』後再自行研讀,就不會很困難。

(B) MySQLi 函數

常用 PHP-mysqli 函數有下列:

函    數

功    能

mysqli_connect(“….”)

建立 MySQL 伺服器連線。傳回 $link 識別值。

mysqli_select_db($link, "course_db”)

開啟 course_db 資料庫。傳回 $dblink 識別值。

mysqli_query("SET NAMES 'utf8'")

設定字元集與編碼。

mysqli_query($dblink, $sql_query)

傳送 SQL 查詢語句。傳回執行結果 $result。

mysqli_close($dblink)

關閉資料庫連線。

mysqli_result($sql_ID, row, field)

一次只能取得一個欄位的內容。

mysqli_db_name($sql_ID, row, field)

取得 mysql_list_dbs() 傳回來資料庫名稱

mysqli_fetch_row($sql_ID)

一次取得一筆(列)資料,並將游標往下移。

mysqli_fetch_array()

一次取得一筆(列)資料,包含欄位索引與資料,並將游標往下移。

mysqli_fetch_assoc()

一次取得一筆(列)資料,使用欄位名稱來取得欄位內容,並將游標往下移。

mysqli_fetch_field()

擷取欄位名稱

mysqli_num_rows()

適用於 Select 命令執行後傳回資料列的筆數。

mysqli_num_fields()

適用於 Select 命令執行後傳回資料的欄位數。

mysqli_affected_rows()

適用於 Select、delete、update 命令執行後,受到影響的記錄筆數。

其中:mysqli_connect() 有兩種格式:

n   建立 MySQL 伺服器連線:mysqli_connect ("伺服器IP", "帳號", "密碼") ,回傳連線識別值 $link (可任意指定)。

n   建立連線同時選擇資料庫:mysqli_connect ("伺服器IP", "帳號", "密碼", "database"),回傳資料庫識別值 $dblink (可任意指定)。

(B) PHP-MySQLi 連線存取步驟

圖 6-6 是透過 PHP-mysqli 連線存取 MySQL 資料庫的步驟,以下分別說明之:

圖6-6 PHP 連線存取 MySQL 步驟

(1) $db_link = mysqli_connect(“localhost”, “root”, “123456”):要求連結資料庫伺服器系統。透過網路連結到資料庫系統,如成功則傳回一個整數型態的連線識別碼 $db_link,否則傳回 0。其中,localhost 表示資料庫伺服器的主機位址(IP 或 URL 位址亦可),與連線要求的使用者名稱(root)與密碼(123456)。

(2) $select_db = mysqli_select_db(course_db):選擇資料庫,一個伺服器系統內大多會被建立多個資料庫,可利用此函數選擇其中某一個資料庫(如course_db),成功則傳回一個整數的識別碼存入 $select_db,否則傳回 0。

(3) $sql_ID = mysqli_query($sql_query):送出 SQL 查詢語言 $sql_query,須先將查詢語句存入 $sql_ID 內。成功則傳回一個整數識別碼給 $result,否則傳回 0 。

(4) $meta = mysqli_fetch_field($sql_ID):擷取查詢結果的欄位資料,再由 $meta->name 取出欄位名稱,則可印出查詢結果各欄位的名稱。

(5) $row = mysqli_fetch_row($sql_ID):擷取查詢結果($sql_ID) 的一列(row)資料,並將游標往下移,將擷取結果傳回 $row 內,如傳回空值表示已擷取完或沒有查詢成功。

(6) mysqli_close($db_link):要求與資料庫伺服器之間連線中斷。

6-4-2 範例研討:PHP 與 MySQL 連線

(A) 程式功能:Ex6_7.php

請編寫一只網頁連結資料庫伺服器的測試程式,伺服器位址在本機電腦(localhost),使用者名稱是 root,密碼是:123456。期望顯示連線成功否如下所示。

連線失敗則顯示:

 (B) 程式範例:

我們利用 $db_link = mysql_connect(“localhost”, “root”, “123456”) 函數連結伺服器系統,如下: (利用 NotePad++ 編輯)

1

2

3

4

5

6

7

8

?php

        $db_link = mysqli_connect(“localhost”, “root”, “12345678”);

        if(!$db_link) {

                echo “MySQL 伺服器連結失敗”;}

        else {

                echo “MySQL 伺服器連結成功”; }

        mysqli_close($db_link);

?>

利用記編輯 Ex6_7.php 程式後,再存放在 c:/appServ/www 目錄下,再開啟瀏覽器檔案。譬如儲存於 C://appServ/www/chap6 目錄下,則輸入:http://localhost/chap6/Ex5_7.php。

6-4-3 範例研討:PHP 與資料庫連線

(A) 程式功能:Ex6_8.php

伺服器連線成功後。接著再練習連結某一資料庫(如 course_system),期望顯示連線成功否如下所示。

 (B) 程式範例:

我們利用 $select_db = mysqli_select_db(course_db)函數來選擇連結 course_db資料庫,如下:

1

2

3

4

5

6

7

8

9

10

<?php

        $db_link = mysqli_connect(“localhost”, “root”, “12345678”)

                or die(“MySQL 伺服器連結失敗 <br>”);

        $select_db = mysqli_select_db(“course_db”);

        if (!select_db)

                echo “無法開啟資料庫 !<br>”;

        else

                echo “course_db 資料庫開啟成功”;

        mysqli_close($db_link);

?>

翻轉工作室:粘添壽

course_db 關聯圖

 

資料庫程式設計:

 

 

 

翻轉電子書系列: