1 / 20

PHP 存取 MySQL 資料庫

PHP 存取 MySQL 資料庫. PDO ( PHP Data Object). PHP. DB Abstraction Layer (PDO). MSSQL. MySQL. Oracle. PHP 存取 MySQL 流程. 產生 PDO 物件. $ db_host = 'db.mis.kuas.edu.tw'; $ db_name = ' cobol '; $ db_user = ' cobol '; $ db_password = ‘1234';

lacey
Download Presentation

PHP 存取 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. PHP 存取 MySQL 資料庫

  2. PDO (PHP Data Object) PHP DB Abstraction Layer (PDO) MSSQL MySQL Oracle

  3. PHP 存取 MySQL 流程 產生PDO物件 $db_host = 'db.mis.kuas.edu.tw'; $db_name = 'cobol'; $db_user = 'cobol'; $db_password = ‘1234'; $dsn = "mysql:host=$db_host;dbname=$db_name;charset=utf8"; $db = new PDO($dsn, $db_user, $db_password); 執行查詢/修改/新增/刪除 $stmt = $db->query("SELECT * FROM sample"); $count = $db->exec("UPDATE table SET field='value'"); 顯示查詢結果/檢查執行結果 foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { $msg .= $row['id'] . " " . $row['name'] . " ". $row['birth'] . " <br/>"; } if($count<1) echo ‘error’;

  4. 範例 $db_host = 'db.mis.kuas.edu.tw'; $db_name = 'cobol'; $db_user = 'cobol'; $db_password = ‘1234'; $dsn = "mysql:host=$db_host;dbname=$db_name;charset=utf8"; try { $db = new PDO($dsn, $db_user, $db_password); $stmt = $db->query("SELECT * FROM sample"); $msg = "<table border>\n"; foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { $msg .= "\t<tr><td>" . $row['id'] . "</td><td>" . $row['name'] . "</td><td>" . $row['birth'] . "</td></tr>"; } $msg .= "</table>\n"; } catch (PDOException $e) { echo $e->getMessage(); }

  5. MySQL 資料庫的字元集 • 字元集(character set):文字編碼方式 • 若儲存與讀取資料庫的編碼不同,便會導致亂碼。 • 為避免 Big5 編碼可能造成的衝碼問題,所以建議採用 UTF8 編碼。 • 為提供最大彈性,MySQL允許在伺服器、資料庫、資料表、欄位與連線等不同層級設定不同字元集,但預設下層會繼承上一層的設定。 • 未特別設定時,MySQL 預設會採用 "latin1" 字元集與 "latin1_swedish_ci" 校對。

  6. 查詢資料庫注意事項 • 避免使用select *,以加快查詢效能。 • 資料庫查詢需耗費大量的時間與成本,若查詢結果在後續程式會被多次使用,需用二維陣列儲存結果。 foreach($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { $arr[] = $row; }

  7. 新增資料 編號具有auto_increment屬性,所以新增時會自動累加編號 新增的記錄 • $count = $db->exec(INSERT 敘述) • $count表示剛才新增了多少筆記錄 • 取得剛才新增訂單的編號 • $id = $db->lastInsertId(); • 範例:將資料新增至 student_profile資料表內: $count = $db->exec(“INSERT INTOstudent_profile (name, addr, birth) VALUES (‘王小明’, ‘高雄市’, ’05/07/2014’)”);

  8. Prepared Statement $db = new PDO($dsn, $db_user, $db_password); 作法一: $stmt = $db->prepare("INSERT INTO student_profile (name, addr, birth) VALUES (?, ?, ?)"); $stmt->execute(array("王小明", "高雄市", "05/07/2014" )); 作法二: $stmt = $db->prepare("INSERT INTO student_profile (name, addr, birth) VALUES (:name, :addr, :birth)"); $stmt->execute(array( “:name" => "王小明", “:addr" => "高雄市", “:birth" => "05/07/2014" ));

  9. 刪除資料 do_delete_action.php show_delete_list.php • $count = $db->exec(DELETE 敘述) • $count表示剛才刪除了多少筆記錄 • 範例:將 student_profile資料表中,姓名欄位值為王小明的記錄刪除: $count = $db->exec(“DELETE from student_profile where name=‘王小明’ ”);

  10. 更新資料 do_update_action.php show_update_page.php show_update_list.php 姓名: 林小華 住址: 台北市 生日: 01/24/2009 • $count = $db->exec(UPDATE 敘述) • $count表示剛才更新了多少筆記錄 • 範例:更新 student_profile資料表中學號為 2的記錄, 將姓名改成王小青: • $count = $db->exec(“UPDATE student_profile set name=‘王小青’ where id=2”)

  11. 整合範例 整合前執行流程 整合後執行流程

  12. 整合前執行流程 修改 開始 查詢 開始 新增 開始 刪除 開始 結束 執行刪除SQL 執行新增SQL 執行修改SQL 結束 結束 結束

  13. 整合後執行流程

  14. 使用Header()函數轉址 • 轉址 • header(“Location: 導向的網址”); • header(“Location: ./show_insert_page.php"); • 如何轉頁並傳遞變數 • header(“Location: ./show_update_page.php?stu_id=26"); • 常犯錯誤 • 在header()執行前輸出文字 • 轉址後,不結束程式

  15. 新增範例 1 2 7 4 6 3 5

  16. 新增範例 1 1 2 2

  17. 新增範例 4 4 3 5

  18. 新增範例 7 6 6

  19. 建立資料庫引用檔 • 一般會將存取資料庫的必要步驟獨立為引用檔: • 連線伺服器 • 設定連線字元集 • 選擇資料庫 • 範例: $db_server = “db.mis.kuas.edu.tw”; $db_name = “cobol”; $username = “cobol”; $password = “1234”; if( ! @mysql_connect($db_server, $username, $password) ){ die(‘連線資料庫伺服器失敗’); } mysql_query(“SET NAMES utf8”); if( ! @mysql_select_db($db_name) ){ die(‘選取資料庫失敗’); }

  20. 建立資料庫引用檔 • 假設此引用檔的檔名為 mysql.inc.php • 其他 PHP 檔案只要執行 include ("mysql.inc.php"); 就可以完成連線伺服器、指定使用的字元集以及資料庫。 • 因為資料庫引用檔包含連線伺服器的帳號和密碼,請務必使用 .php為副檔名,以避免外洩。

More Related