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

 

6-5 PHP 資料庫處理

內容:

  • 6-5-1 PHP+mysqli 資料庫操作

  • 6-5-2 PHP 處理資料庫函數

  • 6-5-3 範例研討:查詢全校女學生

  • 6-5-4 PHP+mysqli 查詢輸出範本

  • 6-5-5 範例研討:列出高雄市同學資料

  • 6-5-6 範例研討查詢資管系規劃課程

6-5-1 PHP+mysqli 資料表操作

選取資料庫之後,即可利用 SQL 操作資料表,其四個基本操作命令包裝如下:

(1) 查詢 – select

$sql_query = “SELECT 欄位名稱 FROM 資料表名稱 WHERE 條件式”;

$result = mysqli_query($sql_query);

(2) 新增 – insert

$sql_query = “INSERT INTO (欄位名, …) VALUE (, …)”;

$result = mysqli_query($sql_query);

(3) 刪除 – delete

$sql_query = “DELETE FROM資料表名稱 WHERE 條件式”;

$result = mysqli_query($sql_query);

(4) 更新 – update

$sql_query = “UPDATE 資料表名稱 SET 欄位1 = 1, …, WHERE 條件式”;

$result = mysqli_query($sql_query);

6-5-2 PHP 處理資料表函數

值得注意的是,資料表經過  SQL 操作之後,所得到結果的資料型態也是資料表。譬如,我們查詢全校所有女同學的姓名、電話、地址,則 PHP+mysqli 查詢語句是:(重點說明SQL 語句中,單引號 ( ' ) 與雙引號 ( " ) 是同樣功能,但在一雙雙引號裡面不可以再出現『雙引號』,必須用單引號)

$sql_query = “SELECT name, tel, address

            FROM students

            WHERE sex = ''”;

$result = mysqli_query($sql_query);

得到的結果 $result 是:

重點:利用 SQL 語言處理關聯式資料庫,輸入是表格,輸出也是以表格格式』,則 $result 需存放輸出的表格,因此是陣列變數方式產生,但它的維度與元素值則以輸出表格的大小而定。此範例中,輸出資料表有三個欄位(nameteladdress),與若干筆資料,則 $result 陣列有 3 個元素(欄位),維度 (資料筆數) 則依查詢結果而定。$result 陣列各元素表示如下:

(a) $result[0][0] = "李雯玲"$result[0][1]="077310609"$result[0][3]="高雄 ... "

(b) $result[1][0] = "劉雅玲"$result[1][1]="077310609"$result[1][3]="高雄 ... "

(c) $result[2][0] = "吳真儀"$result[2][1]="077310608"$result[2][3]="高雄 ... "

接下來,得到了一個陣列的結果 ($result),我們必須將它以表格格式顯示在網頁上,則需要用到 5-# 節介紹的 HTML 表格製作技巧,以下用幾個範例來說明。

6-5-3 範例研討:查詢全校女同學

(A)系統需求:Ex6_9.php

學務處希望製作一只可供查詢全校所有女學生的姓名、電話與地址的網頁。

 (B)製作技巧:

course_db 關聯圖,得知:

吾人執行查詢命並將結果儲存於 $result 陣列變數內,如下:

$sql_query = “SELECT name, tel, address

            FROM students

            WHERE sex = ''”;

$result = mysqli_query($sql_query);

$result 是一只二維變數 $result[i][j]i 為的幾筆資料,j 是欄位( 0name1tel2addrss),吾人欲將 $result 陣列資料取出並顯示在網頁上步驟如下:(如圖 6-7)

6-7 結合陣列存取資料之索引順序

(1) 建立查詢語言:$sql_query = "select name, tel, address  from teachers  "

(2) 執行 SQL 命令:$sql_ID = mysql_query($sql_query),利用函數將 SQL 查詢語言送給系統,執行正常則回應一個識別碼並存入 $sql_ID 變數內,否則回應一個空值。

(3) 取得查詢結果的欄位數量:$fields = mysqli_field_count($sql_ID)

(4) 取得查詢結果的各欄位資料:$meta = mysql_fetch_field($sql_ID),再利用 $meta->name 取得欄位名稱。(利用 while 迴圈)

(4) 擷取一筆資料:$row = mysql_fetch_row($sql_ID),擷取一筆資料結果存入 $row 變數內,並將游標往下移。$row 是一維陣列,欄位如同 mysql_num_fields($sql_ID) 的結果。(利用 while 迴圈)

(5) 擷取一個欄位的內容:$data = $row[$i]$row 是由暫存資料表內擷取一筆資料,$row[$i] 是由row[] 中擷取第 $i 欄位的資料。

除了利用上述函數取得資料外,再加上 PHP 繪製表格的方法,就可以建立所需的網頁要求。

(C)程式範例:Ex6_9.php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

14

<?php

        $select_db = mysqli_connect("localhost", "root", "12345678", "course_db")

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

        $sql_query = "select name, tel, address

                  from students

                  where sex = '' ";

        $result = mysqli_query($select_db, $sql_query);

        echo "<p> 全校女學生名冊 </p>";

        echo "<table border = '2'><tr align='center'>";

        while ($meta = mysqli_fetch_field($result)) {

                echo "<td> $meta->name </td>";

        }

        echo "</tr>";

        while($row=mysqli_fetch_row($result)) {

                echo "<tr>";

                for($j=0; $j<mysqli_num_fields($result); $j++) {

                        echo "<td>$row[$j]</td>";

                }

                echo "</tr>";

        }

        echo "</table>";

        mysqli_close($db_link);

?>

部分程式說明如下:

    

(1) 1~2 行:建立連線與選擇資料庫,回傳識別值 $select_db

(2) 4 ~ 6 行:建立 SQL 查詢語句。

(3) 7 行:利用 mysqli_query() 函數,執行 SQL 查詢動作。

(4) 9 ~ 21 行:輸出查詢結果的資料表

(5) 10 ~ 13 行:利用 $meta = mysqli_fetch_field($result) 擷取目前欄位(由第一個欄位開始)的資料,並將游標移到下一個欄位, 再利用 $meta->name 取得欄位名稱。

(6) 14 行:利用 $row = mysqli_fetch_row($result) 擷取目前游標的該筆紀錄,並存放於 row[] 陣列中,再讓游標往下移。

(7) 16~17 行:利用 mysqli_num_fields() 擷取 $result 的欄位數,再印出 row[] 陣列中各欄位的內容。

 (D)執行結果:

6-5-4 PHP+mysqli 查詢輸出範本

(A) 輸出範本:outMySQL.php

既然 SQL 命令查詢結果也是資料表,並將結果儲存於 PHP 的二維陣列 ($result) 中,至於陣列維度 (資料筆數) 是利用 $row = mysqli_fetch_row() 函數擷取一筆資料,並將游標往下移,如果回傳是 0 的話表示已擷取完畢,另外輸出陣列 ($result) 的欄位數是由 mysqli_num_field() 函數取得,又此可見,我們可將 Ex6_9.php 修改為通用型 PHP+mysqli 輸出程式,並命名為 outMySQL.php,爾後有類似輸出,只要在複製此程式,再填入 SQL 查詢語句即可。(簡化讀者編寫程式時間)

(B) 範本程式:outMySQL.php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<?php

        $select_db = mysqli_connect("localhost", "root", "12345678", "course_db")

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

        $sql_query = " 請填寫 SQL 查詢命令 ";

        $result = mysqli_query($select_db, $sql_query);

        echo "<p> 請填寫輸出名稱 </p>";

        echo "<table border = '2'><tr align='center'>";

        while ($meta = mysqli_fetch_field($result)) {

                echo "<td> $meta->name </td>";

        }

        echo "</tr>";

        while($row=mysqli_fetch_row($result)) {

                echo "<tr>";

                for($j=0; $j<mysqli_num_fields($result); $j++) {

                        echo "<td>$row[$j]</td>";

                }

                echo "</tr>";

        }

        echo "</table>";

        mysqli_close($db_link);

?>

6-5-5 範例研討:列出住高雄市男同學的資料

(A)系統需求:Ex6_10.php

學務處希望製作一只可供查詢住在高雄市男同學的姓名、電話與地址的網頁,期望列印出的結果如下:(僅顯示部分)

(B) 製作技巧:

course_db 關聯圖得知:

SQL 命令如下:

$sql_query = “SELECT name, tel, address

            FROM students

            WHERE sex = ''

            And address Like '%高雄市%' ”;

吾人只要將該 SQL 命令插入 outMySQL.php 內,並另存為 Ex6_10.php 即可。

(C)程式範例:Ex6_10.php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<?php

        $select_db = mysqli_connect("localhost", "root", "12345678", "course_db")

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

        $sql_query = "select name, tel, address

                  from students

                  where sex = ''

                  and address Like '%高雄市%' ";

        $result = mysqli_query($select_db, $sql_query);

        echo "<p> 全校住高雄市男同學名冊 </p>";

        echo "<table border = '2'><tr align='center'>";

        while ($meta = mysqli_fetch_field($result)) {

                echo "<td> $meta->name </td>";

        }

        echo "</tr>";

        while($row=mysqli_fetch_row($result)) {

                echo "<tr>";

                for($j=0; $j<mysqli_num_fields($result); $j++) {

                        echo "<td>$row[$j]</td>";

                }

                echo "</tr>";

        }

        echo "</table>";

        mysqli_close($db_link);

?>

6-5-6 範例研討:查詢資管系規畫的課程

(A)系統需求:Ex6_11.php

吾人想詢問資管系(系別代碼 dep_ID = 11) 在課程資料裡規畫了哪些課程(不分年級全部),列印時欄位名稱請用中文:開課代碼、課程名稱、必選修與學分數,期望用網頁列印如下:(僅顯示部分)

 (B)製作技巧:

首先必須找出全校課程規劃是放在哪一個資料表,由 course_db 系統架構圖可以看出,是儲存於 all_course 資料表內,查詢時只要加入 dep_ID = “11” 資管系(where dep_ID = ‘11’),就可以查到資管系所規劃的課程。但系統要求顯示中文欄位名稱,因此,我們用 as 語句來完成(select course_ID as ‘課程代碼’, …)

 (C) SQL 查詢命令如下:

1

2

3

4

5

6

7

8

….

$sql_query = "Select course_ID as '課程代碼',

                                  course_name as '課程名稱',

                                  required as '必選修',

                                  credit as '學分數'

                           From all_course

                           Where dep_ID = '11' ";

…..

…..

(D) 提示:

請將上述 SQL 命令填入 outMySQL.php 程式,並命名為 Ex6_11.php,即可。

主講人:粘添壽博士

course_db 關聯圖

 

資料庫程式設計 - PHP+MySQL: