接下來我們要開始來進入動態網頁的製作,在此之前,請先確認已經掌握了以下的知識點及基本的操作或撰寫
- HTML - 了解常用的標籤意義,並能以文字編輯器來撰寫需要的頁面結構
- CSS - 了解常用的屬性意義及效果,能自行設計需要的類別組合,並讓網頁呈現應用的外觀。
- PHP - 了解基本的程式語言特性及程式的撰寫方式,能獨立分析需要的程式指令步驟,並撰寫與執行程式
- SQL - 了解資料庫的基本知識,能自己撰寫基礎的增改刪查語法,應依需要建立資料庫及資料表
PHP連線資料庫的方式
由於PHP是一個壽命頗長的程式語言,因此在其發展上根據不同的階段,在和其他系統的配合上也衍生出了多種的搭配方式,針對和MySQL資料庫的連線,目前有三種做法:
- mysql_connect - 最原始的做法,在舊版的PHP版本上還可以看到,但因安全性問題,PHP7.0後己經不支援。
- mysqli_connect - 函式字尾加上i系列的語法為安全性增強的語法,也是目前許多PHP系統常見的用法。
- PDO - 為一個將資料庫連線抽象化後的機制,可以相容多種資料庫,同時也兼顧一定的安全性,為近期建議的做法,我們也將採用PDO的連線方式來進行相關的資料庫操作。
- PDO連線的建立方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20/***********************************************************************
* 建立資料庫基本資料,主要是資料庫系統名稱,主機名稱,使用的資料庫等等資訊
* host => 主機名稱或是IP
* charset => 使用的字元集,一般選utf8即可
* dbname => 使用的資料庫名稱
***********************************************************************/
$dsn="mysql:host=localhost;charset=utf8;dbname=students";
/***********************************************************************
* 使用new 語法來建立一個PDO連線物件,並將這個物件指定給一個變數,
* 方便接下來的操作
* 第一個參數位置是資料庫的設定資料
* 第二個參數是資料庫的使用者帳號
* 第三個參數是資料庫的使用者密碼
* 第四個參數是附加設定資料,以陣列方式呈現,這個參數可不填
***********************************************************************/
$pdo=new PDO($dsn,'root','',[]);
- PDO連線的建立方式
指令的傳遞與回傳
PHP與資料庫連線的目的只有兩個,一個是將SQL語法送進資料庫系統,一個是取得SQL語法執行後的結果。
SQL指令的傳遞
建立查詢指令
以字串的方式建立起SQL語法。1
$sql="SELECT * FROM `students` where `id` < 30";
以函式傳遞指令
使用 PDO 建立的物件變數來進行各項資料庫存取的操作1
$pdo->query($sql);
取得回傳值
- 以函式取得回傳值並指定給變數
1
$rows = $pdo->query($sql)->fetchAll();
回傳值/資料的使用
回傳值的內容會因為傳遞時的SQL語法而有不同的結果,有時是單一個值,有時是一個一維陣列,有時是多維陣列,在運用時要了解自己傳遞的SQL語法會得到的結果。
逐筆取回或是一次全部取回
1 | //一次取回一筆 |
使用索引或欄位名來取出資料
預設取回的查詢結果會提供兩種取用方式,分別為欄位索引值或是欄位名稱,可依需求決定要使用那種取用法
1 | //使用索引值來取得資料 |
PDO的常用函式
函式 | 用途 |
---|---|
$pdo->query($sql)->fetch() | 執行sql語句,並返回一筆資料,如果有多筆資料結果,則需要執行多次來取得; 可以代入參數來指定要回傳的資料型式: PDO::FETCH_ASSOC => 只回傳帶欄位名稱的資料 PDO::FETCH_NUM => 只回傳帶欄位索引的資料 |
$pdo->query($sql)->fetchAll() | 執行sql語句,並返回全部的資料,所有資料會放在一個陣列; 可以代入參數來指定要回傳的資料型式: PDO::FETCH_ASSOC => 只回傳帶欄位名稱的資料 PDO::FETCH_NUM => 只回傳帶欄位索引的資料 |
$pdo->query($sql)->fetchColumn($n) | 執行sql語句,並返回該筆資料中指定欄位的資料,$n為欄位的索引值(0,1,2…) |
$pdo->exec($sql) | 執行sql語句,但不返回資料,而是返回影響的資料筆數,適合使用在新增,更新或刪除資料時 |
$pdo->prepare($sql) | 用來建立一個SQL語句的模板,把參數獨立出來 |
$pdo->execute($sql) | 執行 preare() 語法中準備的模板,並把參數代入 |
PHP + MySQL練習
簡易註冊系統
- 建立一個資料表來存放使用者的帳號、密碼及個人資料
- 建立一個網頁表單可以讓使用者輸入自己的帳號、密碼及個人資料
- 送出表單後可以將使用者的資料存入資料表
簡易登入系統
- 建立一個資料表來存放使用者的帳號及密碼
- 在網頁上輸入帳號密碼後,向資料庫比對帳密是否正確
- 如果正確則導向另一個頁面並顯示登入成功
- 如果錯誤則回到登入頁,並顯示”帳號或密碼錯誤”,請重新輸入”的提示
資料庫與PHP網頁作業
請建立一個投票系統可以提供投票功能,並能查看投票的結果
- 請分析需要的功能及設計資料表
- 請充分運用學到的各項網頁知識來美化這個投票系統的畫面
- 請設計一個頁面可以用來輸入投票的題目
- 請設計一個頁面可以看到目前進行投票的項目
- 請設計一個頁面可以看到投票統計的結果
- 進階功能
- 請整合註冊及登入系統
- 能以長條圖或圖像化的方式來呈現統計的結果
- 能判斷使用者的狀態,避免重覆投票