Ch13 存取MySQL資料庫 實作:會員管理系統 網頁程式設計
大綱 PHP與MySQL資料庫 建立與關閉資料連接 存取MySQL資料庫伺服器 執行SQL指令 取得欄位資訊 取得記錄內容 分頁瀏覽 2018/11/16
PHP與MySQL資料庫 PHP提供了數十個函式讓使用者存取MySQL資料庫: mysqli_affected_rows() mysqli_close() mysqli_connect() mysqli_data_seek() mysqli_connect_errno() mysqli_connect_error() mysqli_errno() mysqli_error() mysqli_fetch_array() mysqli_fetch_assoc() mysqli_fetch_field() mysqli_fetch_object() mysqli_fetch_row() mysqli_field_seek() mysqli_free_result() mysqli_get_client_info() mysqli_get_host_info() mysqli_get_proto_info() mysqli_get_server_info() mysqli_num_fields() mysqli_num_rows() mysqli_query() mysqli_select_db() 2018/11/16
建立資料連接 使用mysqli_connect() 函式建立資料連接,其語法如下: 例: mysqli_connect([string host [, string username [, string password [,string dbname]]]]) <?php $link = mysqli_connect("localhost", "root", "mypassword") or die("無法建立連接"); echo "成功建立連接"; ?> 2018/11/16
關閉資料連接 使用mysqli_close() 函式關閉資料連接,其語法如下: 例: mysqli_close([resource link_identifier]) <?php $link = mysqli_connect("localhost", "root", "mypassword") or die("無法建立連接"); echo "成功建立連接"; mysqli_close($link); ?> 2018/11/16
存取MySQL資料庫伺服器 取得MySQL用戶端函式庫的版本資訊 使用mysqli_get_client_info() 函式取得MySQL用戶端函式庫的版本資訊,其語法如下: 例: mysqli_get_client_info() <?php echo "MySQL 用戶端程式庫的版本: " . mysqli_get_client_info(); ?> 2018/11/16
取得MySQL主機的相關資訊 使用mysqli_get_host_info() 函式取得MySQL主機的相關資訊,其語法如下: 例如: mysqli_get_host_info([resource link_identifier]) <?php $link = mysqli_connect("localhost", "root", "mypassword"); echo '$link 連線主機為:' . mysql_get_host_info($link); mysql_close($link); ?> 2018/11/16
取得MySQL資料庫協定的版本資訊 使用mysqli_get_proto_info() 函式取得MySQL資料庫協定的版本資訊,其語法如下: 例如: mysqli_get_proto_info([resource link_identifier]) <?php $link = mysql_connect("localhost", "root", "mypassword"); echo '$link 資源變數的協定版本為: ' . mysqli_get_proto_info($link); mysql_close($link); ?> 2018/11/16
取得MySQL資料庫伺服器的版本資訊 使用mysqli_get_server_info() 函式取得MySQL資料庫伺服器的版本資訊,其語法如下: 例如: mysqli_get_server_info([resource link_identifier]) <?php $link = mysql_connect("localhost", "root", "mypassword"); mysql_close($link); ?> 2018/11/16
取得存取MySQL資料庫伺服器的錯誤訊息 下列函式取得在存取資料庫時,所產生的錯誤代碼與錯誤訊息: mysqli_connect_errno() mysqli_connect_error() mysqli_errno(resource link_identifier) mysqli_error(resource link_identifier) 例: <?php $link = @mysqli_connect("localhost", "root", "mypassword1") or die("無法建立連接: " . mysqli_connect_errno() . " " . mysqli_connect_error()); echo "成功建立連接"; mysqli_close($link); ?> 2018/11/16
範例1 <?php //讓php與MySQL連接 $link = mysqli_connect("localhost", "root", "1234") or die("無法建立連接" . mysqli_connect_error() . ":" . mysqli_connect_error() . "<br>"); echo "成功與MySQL建立連接<br>"; //用戶端版本 echo "MySQL 用戶端程式庫的版本: " . mysqli_get_client_info(). "<br>"; //主機相關資訊 echo '$link 連線主機為:' . mysqli_get_host_info($link) . "<br>"; //伺服器版本資訊 echo '$link 連線主機的資料庫版本為: ' . mysqli_get_server_info($link) . "<br>"; //關閉與MySQL連接 mysqli_close($link); ?> 2018/11/16
執行SQL指令 開啟資料庫:使用mysqli_select_db() 函式開啟資料庫,其語法如下: 例如: mysqli_select_db(resource link_identifier, string database_name) <?php $link = mysqli_connect("localhost", "root", "mypassword") or die("無法建立連接: " . mysqli_connect_error()); mysqli_select_db($link, "students") or die ("無法開啟 students 資料庫: " . mysqli_error($link)); mysqli_close($link); ?> 2018/11/16
執行SQL指令 開啟資料庫後,使用mysqli_query() 函式執行SQL指令,其語法如下: 例如: mysqli_query(resource link_identifier, string query) <?php $link = mysqli_connect("localhost", "root", "mypassword") or die("無法建立連接: " . mysqli_connect_error()); mysqli_select_db($link, "product") or die ("無法開啟 prodcut 資料庫: " . mysqli_error($link)); $sql = "SELECT * FROM price WHERE category = '主機板'"; $result = mysqli_query($link, $sql); mysqli_close($link); ?> 2018/11/16
取得執行SQL指令被影響的記錄數目或欄位數目 PHP提供下列三個函式,讓我們能夠得知在執行SQL指令後,有多少筆記錄或多少個欄位受到影響: mysqli_num_rows(resource result) mysqli_num_fields(resource result) mysqli_affected_rows([resource link_identifier]) <?php require_once("dbtools.inc.php"); $link = create_connection(); $sql = "SELECT * FROM price WHERE category = '主機板'"; $result = execute_sql($link, "product", $sql); echo "category = 「主機板」的記錄有 " . mysqli_num_rows($result) . " 筆"; echo ",包含 " . mysqli_num_fields($result) . " 個欄位。"; mysqli_close($link); ?> 2018/11/16
取得某一欄位資訊 使用mysqli_fetch_field_direct() 函式取得每一個欄位資訊,其語法如下: 舉例來說,假設要取得第2個欄位資訊,可以寫成如下: 假設要取得第2個欄位資訊並顯示其欄位名稱及資料型態,可以寫成如下: mysqli_fetch_field_direct(resource result, int field_offset) $meta = mysqli_fetch_field_direct($result, 1); $meta = mysqli_fetch_field_direct($result, 1); echo "欄位名稱:$meta->name"; echo "資料型態:$meta->type"; 2018/11/16
取得所有欄位資訊 使用mysqli_fetch_field() 函式取得所有欄位資訊,其語法如下: 例: mysqli_fetch_field(resource result) <?php require_once("dbtools.inc.php"); $link = create_connection(); $sql = "SELECT * FROM PRICE WHERE category = '主機板'"; $result = execute_sql($link, "product", $sql); echo "<table width='400' border='1'><tr align='center'>"; echo "<td>欄位名稱</td><td>資料型態</td><td>最大長度</td></tr>"; while ($meta = mysqli_fetch_field($result)) { echo "<tr>"; echo "<td>$meta->name</td>"; echo "<td>$meta->type</td>"; echo "<td>$meta->max_length</td>"; echo "</tr>"; } echo "</table>" ; mysqli_close($link); ?> 2018/11/16
移動欄位指標 mysqli_field_seek() 函式可以移動欄位指標,其語法如下: 例如: mysqli_field_seek(resource result, int field_offset) $seek_result = mysqli_field_seek($result, 4); $meta = mysqli_fetch_field($result); 2018/11/16
取得記錄內容 mysqli_fetch_row() 函式可以用來讀取一筆記錄,然後將記錄指標移到下一筆,若讀不到記錄,就傳回FALSE,其語法如下: 舉例來說,下面的程式碼表示要讀取五筆記錄,然後將讀取的記錄分別存放在陣列row1、row2、row3、row4、row5: 若要顯示第2筆記錄的第3個欄位,可以寫成如下: mysqli_fetch_row(resource result) $row1 = mysqli_fetch_row($result); $row2 = mysqli_fetch_row($result); $row3 = mysqli_fetch_row($result); $row4 = mysqli_fetch_row($result); $row5 = mysqli_fetch_row($result); echo $row2[2]; 2018/11/16
取得記錄內容並放入陣列中 mysqli_fetch_array() 函式也是用來讀取記錄並存放在陣列,然後將記錄指標移到下一筆,若讀不到記錄,就傳回FALSE,不同之處在於取得欄位內容時,mysqli_fetch_row() 函式是以欄位序號取得欄位內容,而mysqli_fetch_array() 函式則可以使用欄位序號或欄位名稱取得欄位內容。 mysqli_fetch_array() 函式的語法如下: mysqli_fetch_array(resource result [, int result_type]) 2018/11/16
取得一筆記錄內容放入陣列中 mysqli_fetch_ assoc() 也是用來讀取記錄內容並存放在陣列,然後將記錄指標移到下一筆,其語法如下,參數result為資源識別字: mysqli_fetch_object() 函式也是用來讀取記錄內容,然後將記錄指標移到下一筆,若讀不到記錄,就傳回FALSE,其語法如下,參數result為資源識別字: mysqli_fetch_assoc(resource result) mysqli_fetch_object(resource result) 2018/11/16
移動記錄指標 mysqli_data_seek() 函式可以讓我們輕鬆地移動記錄指標,其語法如下,若移動記錄指標成功,就傳回TRUE,否則傳回FALSE: 例如: mysqli_data_seek(resource result, int row_number) $seek_result = mysqli_data_seek($result, 9); $row = mysqli_fetch_row($result); 2018/11/16
分頁瀏覽 當篩選出來的記錄太多時,我們通常不會一次全部顯示,而是以分頁的方式來顯示,才不會造成瀏覽單一網頁的速度過慢,如右圖 2018/11/16
範例2(1/4) <?php //讓php與MySQL連接 $link = mysqli_connect("localhost", "root", "1234") or die("無法建立連接" . mysqli_connect_error() . ":" . mysqli_connect_error() . "<br>"); mysqli_set_charset($link,"utf8"); //連接資料庫,例如:W14 mysqli_select_db($link, "W14") or die ("無法開啟 W14 資料庫: " . mysqli_error($link)); //開始可以在以下輸入SQL,注意以下資料表的名稱,要修改為真正的資料庫中的資料表名稱 $sql = "SELECT * FROM member "; //執行SQL,並將結果存在$result中 $result = mysqli_query($link, $sql); //取得記錄數 $recNo = mysqli_num_rows($result); echo $recNo . "筆資料"; 2018/11/16
範例2(2/4) //取得欄位資訊 echo "欄位資訊: <br>"; echo "<table width='400' border='1'><tr align='center'>"; echo "<td>欄位名稱</td><td>資料型態</td><td>最大長度</td></tr>"; //宣告一個物件變數$meta while ($meta = mysqli_fetch_field($result)) { echo "<tr>"; echo "<td>$meta->name</td>"; echo "<td>$meta->type</td>"; echo "<td>$meta->max_length</td>"; echo "</tr>"; } 2018/11/16
範例2(3/4) //取得每一筆記錄內容 echo "記錄內容:"; echo "</table>" ; echo "<table width='400' border='1'><tr align='center'>"; echo "<tr>"; while($meta = mysqli_fetch_field($result)) { echo "<td>"; echo $meta->name; echo "</td>"; } 2018/11/16
範例2(4/4) echo "</tr>"; //利用foreach來讀每一筆資料 while($row=mysqli_fetch_assoc($result)) { echo "<tr>"; foreach($row as $item=>$value) { echo "<td width='14%'>"; echo $value; echo "</td>"; } echo "</table>" ; //關閉與MySQL連接 mysqli_close($link); ?> 2018/11/16
實務-會員管理系統 2018/11/16
認識會員管理系統 「會員管理系統」也是網頁上相當常見的功能,瀏覽者欲進入某個網站,必須先申請加入該網站的會員,通常加入會員都是免費的。 以下各圖是我們即將要製作的會員管理系統。 1.輸入帳號與密碼 2.按 [登入] 圖(二) 圖(一) 2018/11/16
圖(三) 加入會員網頁 圖(五) 查詢密碼網頁 圖(四) 註冊成功網頁 2018/11/16
網頁的執行流程 2018/11/16 main.php 會員專屬網頁 帳號與密碼正確 輸入帳號與密碼後按 [登入] member 資料庫 顯示字串「帳號密碼錯誤,請查明後再登入」 帳號與密碼錯誤 checkpwd.php 密碼驗證 delete.php 刪除資料網頁 點取「刪除會員資料」超連結 modify.php 修改資料網頁 點取「修改會員資料」超連結 update.php 更新資料網頁 輸入資料後按 [加入會員] 將資料更新到資料庫 join.htm 加入會員網頁 search_pwd.htm 查詢密碼網頁 addmember.php 新增資料網頁 search.php 處理查詢網頁 點取「加入會員」超連結 將資料寫入資料庫 輸入帳號、E-mail及顯示方式,然後按 [查詢] 寄出密碼通知 選擇網頁顯示 選擇E-mail通知 以網頁顯示帳號與密碼 輸入資料後按[修改資料] 刪除資料庫的資料 讀取資料庫的資料 送回讀取結果 index.htm 首頁 點取「查詢密碼」超連結 查詢使用者帳號與密碼 2018/11/16