1 / 19

連結 MySQL 資料庫

連結 MySQL 資料庫. 鄧姚文 joseph.deng@gmail.com http://www.ywdeng.idv.tw. 流程. 建立連線: mysql_connect() 或 mysql_pconnect() 送出 SQL : mysql_db_query() 或 mysql_select_db() + mysql_query() 處理資料: mysql_fetch_array() 或 mysql_fetch_assoc() 或 mysql_fetch_row() … 關閉連線: mysql_close(). 建立連線.

Download Presentation

連結 MySQL 資料庫

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 連結 MySQL 資料庫 鄧姚文 joseph.deng@gmail.com http://www.ywdeng.idv.tw

  2. 流程 • 建立連線: • mysql_connect() 或 mysql_pconnect() • 送出 SQL: • mysql_db_query() 或 mysql_select_db() + mysql_query() • 處理資料: • mysql_fetch_array() 或 mysql_fetch_assoc() 或 mysql_fetch_row() … • 關閉連線: • mysql_close()

  3. 建立連線 • 不佔線的方式:每次建一個連線,用完就關閉 • $link = mysql_connect($db_host, $user, $password); • 佔線的方式:permanent 持久性連線 • mysql_pconnect() • mysql_error() 傳回錯誤訊息(if any)

  4. 送出 SQL • 送出 SELECT • $resource = mysql_db_query($db_name, $sql, $link); // 如果只有一個資料庫連線,$link 可省略 • $resource 為查詢的結果 • 送出 UPDATE, INSERT, DELETE • mysql_db_query() 傳回 TRUE/FALSE 代表是否成功 • mysql_affected_rows() 傳回受影響的資料列數 • 也可以這樣做: • mysql_select_db($db_name) • mysql_query($sql, $link)

  5. 處理資料 • $row = mysql_fetch_array($resource); • 可以用 $row['地址'] 取得欄位資料,也可以用 $row[3] 取得欄位資料 • $n = mysql_num_fields($resource) 傳回欄位數目 • $n = mysql_num_rows($resource) 傳回資料列數 • $row = mysql_fetch_assoc($resource) 只能用 $row['地址'] 取得欄位資料 • $row = mysql_fetch_row($resource)只能用 $row[3] 取得欄位資料

  6. 列出每一個欄位的名稱-1 $result = mysql_query($sql); echo "<table border='1'><tr>"; $i = 0; while ($i < mysql_num_fields($result)) { $meta = mysql_fetch_field($result, $i); echo "<th>" . $meta->name . "</th>"; $i++; } echo "</tr>";

  7. 列出每一個欄位的名稱-2 $data = mysql_fetch_assoc($res); echo "<table border='1'><tr>"; foreach ($data as $field_name=>$field_val) { echo "<th>" . $field_name . "</th>"; } echo "</tr>";

  8. 列出每一列的資料 do { echo "<tr>"; foreach ($data as $field_val) { echo "<td>" . $field_val . "</td>"; } echo "</tr>"; } while ($data = mysql_fetch_assoc($res)); echo "</table>";

  9. 關於密碼 • 密碼於資料庫之中不應以明文儲存 • MySQL 提供加密函數 • PASSWORD() • MD5(): Calculate MD5 checksum • SHA1(): Calculate an SHA-1 160-bit checksum • ENCRYPT()

  10. 使用者登入驗證:比對帳號密碼 $acc=$_POST["account"]; $pwd=$_POST["password"]; $sql="SELECT * FROM `users` WHERE `account` = '$acc' AND `password` = PASSWORD( '$pwd' )"; $result = mysql_query($sql); if (mysql_num_rows($result) < 1) { die ("帳號或密碼錯誤!"); }

  11. 關於中文 • 請使用 utf8 編碼 • 為避免亂碼,在存取資料庫前: • $sql = 'SET NAMES utf8'; • $result = mysql_query ($sql);

  12. 如何儲存資料庫連線資訊? • 將資料庫連線資訊另存成 connection.inc.php • 以 require 或 require_once 引入 • require() 引入檔案,若失敗,程式停止 • require_once() 與 require() 同,但同一個檔案只引入一次,不重複引入 • include() 引入檔案,若失敗,發出警告,程式繼續 • include_once() 同 include(),但同一個檔案只引入一次,不重複引入

  13. 練習:會員管理 • 幾乎每一個網站都有會員管理功能 • 功能需求: • 會員可以自行申請入會 • 會員帳號必須由管理員『啟用』後才可以登入 • 會員可以修改自己的基本資料(帳號除外) • 會員基本資料包括: • 登入帳號、登入密碼、姓名、性別、出生日期、電子郵件地址、聯絡電話 • 管理員可以新增、修改或刪除所有會員的基本資料

  14. 會員基本資料表 CREATE TABLE `users` ( `account` varchar(20) NOT NULL COMMENT '登入帳號', `password` varchar(50) NOT NULL COMMENT '登入密碼', `name` varchar(100) NOT NULL COMMENT '姓名', `sex` enum('男','女') NOT NULL default '女' COMMENT '性別', `birth_date` date NOT NULL COMMENT '出生日期', `email` varchar(255) NOT NULL COMMENT '電郵', `tel` varchar(20) NOT NULL COMMENT '電話或手機', `memo` text COMMENT '備註', `is_admin` enum('Y','N') NOT NULL default 'N' COMMENT '是否管理員', `is_active` enum('Y','N') NOT NULL default 'N' COMMENT '是否已啟用', PRIMARY KEY (`account`), KEY `name` (`name`) ) DEFAULT CHARSET=utf8;

  15. connection.inc.php $db_host = "localhost"; // 資料庫主機 $db_account = "9888D888"; // 資料庫帳號 $db_password = "99999999"; // 資料庫密碼 $db_database = "9888D888"; // 資料庫名稱 /* * 檢查登入帳號與密碼是否正確 */ function verify_login($account, $password) { global $db_host, $db_account, $db_password, $db_database; $link = mysql_connect($db_host, $db_account, $db_password) or die(mysql_error()); mysql_select_db($db_database) or die(mysql_error()); $sql = 'SET NAMES utf8'; $result = mysql_query($sql); $sql="SELECT * FROM `users` WHERE `account` = '$account' AND `password` = PASSWORD( '$password' )"; $result = mysql_query($sql); return (mysql_num_rows($result) == 1); }

  16. 會員登入 login.php • 提供會員登入畫面 • 檢驗帳號與密碼 • 若登入成功 • 一般會員轉移至 index.php • 管理員轉移至 admin.php

  17. 一般會員首頁 index.php • 會員若尚未登入: • 提示登入 • 提示申請會員 • 會員已經登入 • 提示登出 • 提示修改基本資料 • 提示修改密碼

  18. 管理員首頁 admin.php • 若尚未登入:轉移至 login.php • 若已經登入 • 提示登出 • 列出會員清單 • 提供編輯會員基本資料功能 • 提供刪除會員功能 • 提供新增會員功能

  19. 會員活動記錄 • Session:從使用者進站到離開之間的過程 • PHP 的 Session 功能 • session_start() 啟動 Session • $_SESSION[] 存放 Session 變數的全域陣列(assoc) • session_unset() 清除 Session 變數 • 例如,在驗證登入系統使用者帳號與密碼無誤之後: • session_start(); • $_SESSION["LOGIN_OK"] = "TRUE"; • 以後就以 if ($_SESSION[“LOGIN_OK”] === “TRUE”) 判斷使用者是否已經登入

More Related