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

翻轉工作室:粘添壽     course_db E-R 關聯圖 <開啟>

 

5-5 PHP 資料表處理

5-5-1 PHP 資料表操作

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

(1) 查詢 – select

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

$sql_ID = mysql_query($sql_query);

(2) 新增 – insert

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

$sql_ID = mysql_query($sql_query);

(3) 刪除 – delete

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

$sql_ID = mysql_query($sql_query);

(4) 更新 – update

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

$sql_ID = mysql_query($sql_query);

 

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

值得注意的是,資料表經過  SQL 操作之後,所得到結果的資料型態也是資料表。譬如,我們查詢全校所有女同學的姓名、電話、地址,得到的結果是:

這個暫時性資料表有三個欄位(nameteladdress),與若干筆資料。其實,它也是一個陣列的資料結構。但一般陣列沒有欄位名稱,這種陣列有,又稱這種資料結構為『結合陣列』。如果上述陣列名稱為 girl,則陣列各元素表示如下:

(a) $girl[0][0] = 李蘭馨、$girl[0][1]=077310606

(b) $girl[1][0] = 謝卉祈、$girl[1][1] = 077310609

如果用結合陣列表示則:

(a) $girl[0][“name”] = 李蘭馨、$girl[0][“tel”]=077310606

(b) $girl[1][“name”] = 謝卉祈、$girl[1][“tel”] = 077310609

利用 Select 命令由資料庫取得資料也是資料表型態,傳回結果大多以陣列方式(結合陣列)儲存,如何由此陣列取得資料,有下列函數:

   

   

mysql_connect(“….”)

MySQL 伺服器連結。

mysql_select_db(‘course_db”)

開啟 course_db 資料庫。

mysql_query($sql_query)

傳送 SQL 查詢語句。

mysql_close($dblink)

關閉資料庫連線

mysql_result($sql_ID, row, field)

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

mysql_db_name($sql_ID, row, field)

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

mysql_fetch_row($sql_ID)

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

mysql_fetch_array()

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

mysql_fetch_assoc()

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

mysql_field_name()

擷取欄位名稱

mysql_num_rows()

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

mysql_num_fields()

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

mysql_affected_rows()

適用於 Selectdeleteupdate 命令執行後,受到影響的記錄筆數。

 

5-5-3 範例研討:查詢教師資料網頁

(A)系統需求:Ex5_7.php

學務處希望製作一只可供查詢全校所有老師的姓名、電話與地址的網頁,期望列印出的結果如下:(僅顯示部分)

(B)製作技巧:

如果我們直接在 appServ SQL 介面上查詢(select name, tel, address from teachers;) 得到以下結果:

此暫存資料表還是儲存在資料庫管理系統內,索取順序如圖 5-7 所示,分別利用下列函數去索取它:

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

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

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

(3) 查詢執行結果的欄位數:$num = mysql_num_fields($sql_ID),執行後回應欄位數並存入 $num,否則回應 0

(4) 擷取欄位名稱:$field_name = mysql_field_name($sql_ID, $i),回應第 $i 欄位的名稱。

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

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

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

(C)程式範例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

14

15

<?php

        $db_link = mysql_connect("localhost", "root", "123456")

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

        $select_db = mysql_select_db("course_system");

        mysql_query("SET NAMES 'utf8'");

        $sql_query = "select name, tel, address

                      from teachers";

        $result = mysql_query($sql_query);

        // 開始繪製表格

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

    // 繪製欄位名稱

        for($i=0; $i<mysql_num_fields($result); $i++) {     

                echo "<td>".mysql_field_name($result, $i)."</td>";

        }

        echo "</tr>";

    // 輸出各筆資料

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

                echo "<tr>";

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

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

                }

                echo "<tr/>";

        }

        mysql_close($db_link);

?>

部分程式說明如下:

(1) 5 行:設定資料庫存取字型。

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

(3) 11 ~ 15 行:繪出資料表頭的表格,再填入各欄位名稱。

(4) 16 ~ 21 行:繪出資料表內容的表格,再填入個欄位的資料。

(D)執行 PHP 程式

由瀏覽器 URL:http://localhost/book/chap5/Ex5_7.php

 

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

(A)系統需求:Ex5_8.php

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

(B)製作技巧:

如要查出男性且住在高雄市的同學,則查詢條件是『Where sex = “” And address Like “%高雄市%”』。我們直接在 appServ SQL 介面上查詢(select name, tel, address from students where sex = “” and address Like “%高雄市%”;) 得到以下結果:

此暫存資料表還是儲存在資料庫管理系統內,我們分別利用下列函數索取它:(如圖 5-# 所示)

(C)程式範例:

( Ex5_7.php 修改 $sql_query 查詢語言即可)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<?php

        $db_link = mysql_connect("localhost", "root", "123456")

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

        $select_db = mysql_select_db("course_system");

        mysql_query("SET NAMES 'utf8'");

        $sql_query = "Select name, tel, address

                      From students

                      Where sex = ''

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

       

        $result = mysql_query($sql_query);

       

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

        for($i=0; $i<mysql_num_fields($result); $i++) {

                echo "<td>".mysql_field_name($result, $i)."</td>";

        }

        echo "</tr>";

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

                echo "<tr>";

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

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

                }

                echo "<tr/>";

        }

       

        mysql_close($db_link);

?>

部分程式說明如下:

(1) 6~9 行與 Ex5_7.php 不同,其餘完全相同。

 

5-5-5 自我挑戰:查詢資管系所規畫的課程

(A)系統需求:PM5_3.php

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

(B)製作技巧:

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

(C)程式提示:

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'";

…..

…..

 

<GOTOP>