0%

[PHP] Lesson 4 PHP + MySQL

接下來我們要開始來進入動態網頁的製作,在此之前,請先確認已經掌握了以下的知識點及基本的操作或撰寫

  • 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','',[]);

指令的傳遞與回傳

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
2
3
4
5
//一次取回一筆
$row=$pdo->query($sql)->fetch();

//一次取回多筆
$rows = $pdo->query($sql)->fetchAll();

使用索引或欄位名來取出資料

預設取回的查詢結果會提供兩種取用方式,分別為欄位索引值或是欄位名稱,可依需求決定要使用那種取用法

1
2
3
4
5
6
//使用索引值來取得資料
echo $row[0];

//使用欄位名稱來取得資料
echo $row['id'];

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網頁作業

請建立一個投票系統可以提供投票功能,並能查看投票的結果

  • 請分析需要的功能及設計資料表
  • 請充分運用學到的各項網頁知識來美化這個投票系統的畫面
  • 請設計一個頁面可以用來輸入投票的題目
  • 請設計一個頁面可以看到目前進行投票的項目
  • 請設計一個頁面可以看到投票統計的結果
  • 進階功能
    • 請整合註冊及登入系統
    • 能以長條圖或圖像化的方式來呈現統計的結果
    • 能判斷使用者的狀態,避免重覆投票