資料庫程式設計 – PHP+MySQL :第 六章 SQL 語言與 PHP+MySQL 上一頁 |
6-5 PHP 資料庫處理
6-5-1 PHP+mysqli 資料表操作 選取資料庫之後,即可利用 SQL 操作資料表,其四個基本操作命令包裝如下: (1) 查詢 – select
(2) 新增 – insert
(3) 刪除 – delete
(4) 更新 – update
6-5-2 PHP 處理資料表函數 值得注意的是,資料表經過 SQL 操作之後,所得到結果的資料型態也是資料表。譬如,我們查詢全校所有女同學的姓名、電話、地址,則 PHP+mysqli 查詢語句是:(重點說明:SQL 語句中,單引號 ( ' ) 與雙引號 ( " ) 是同樣功能,但在一雙雙引號裡面不可以再出現『雙引號』,必須用單引號)。
得到的結果 $result 是:
重點:『利用 SQL 語言處理關聯式資料庫,輸入是表格,輸出也是以表格格式』,則 $result 需存放輸出的表格,因此是陣列變數方式產生,但它的維度與元素值則以輸出表格的大小而定。此範例中,輸出資料表有三個欄位(name、tel、address),與若干筆資料,則 $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 陣列變數內,如下:
$result 是一只二維變數 $result[i][j],i 為的幾筆資料,j 是欄位( 0:name、1:tel、2:addrss),吾人欲將 $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) 第 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
6-5-5 範例研討:列出住高雄市男同學的資料 (A)系統需求:Ex6_10.php 學務處希望製作一只可供查詢住在高雄市男同學的姓名、電話與地址的網頁,期望列印出的結果如下:(僅顯示部分)
(B) 製作技巧: 由 course_db 關聯圖得知:
SQL 命令如下:
吾人只要將該 SQL 命令插入 outMySQL.php 內,並另存為 Ex6_10.php 即可。 (C)程式範例:Ex6_10.php
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 查詢命令如下:
(D) 提示: 請將上述 SQL 命令填入 outMySQL.php 程式,並命名為 Ex6_11.php,即可。 |
翻轉工作室:粘添壽
資料庫程式設計 - PHP+MySQL:
翻轉電子書系列:
|