[week 9] 後端基礎 - PHP 語法、資料庫 MySQL
本篇為 [BE101] 用 PHP 與 MySQL 學習後端基礎 這門課程的學習筆記。如有錯誤歡迎指正。
「後端」是什麼?
後端實際上包含以下三大項(括弧內為舉例使用的程式):
- 網頁伺服器(Apache):伺服器程式。專門處理 Request 與 Response,是後端最重要的部分。
- 寫程式(PHP):接收網頁伺服器的 Request 並執行後端語言,處理成 output,通常是 html。
- 資料庫系統(MySQL):資料庫程式。專門用來操作資料庫,能夠更有效率儲存、修改或查詢資料。
後端環境建置
以下透過 XAMPP 來進行實作。XAMPP 結合了 Apache + MariaDB + PHP,能夠快速建置後端環境。
MySQL 為目前市佔率最高的資料庫系統。但 XAMPP 上使用的是 MariaDB 而非 MySQL。這是因為當初 MySQL 被甲骨文公司收購後,開發者擔心會有後患,像是轉為商用等等,於是社群就 clone 出 MariaDB ,因此這兩個系統幾乎完全相同。
XAMPP
- 到 XAMPP 官網 下載程式並安裝
- 開啟 XAMPP 並運行 Apache 和 MySQL

- 點選 Adimn 開啟網頁:
http://localhost/dashboard/
,出現以下畫面就代表安裝成功!

- 以 XAMPP 程式而言,PHP 檔案都會放在 htdocs 資料夾內,且
網址路徑 = 檔案路徑

- 以下為範例在 hotdocs 另建一個資料夾 heidi,裡面新建 test.php,並在編輯器輸入下列程式碼:
- 以瀏覽器運行該網址:
http://localhost/heidi/test.php

靜態網頁 vs 動態網頁
網頁中的「靜態」與「動態」,並非代表視覺上的移動,兩者差異在於是否以「伺服器程式」去產生網頁上的資料。
靜態網頁
- server 收到 request 後,找到相對應的檔案(
.css
是靜態檔案)後,把檔案直接回傳 response
- 檔案內容是什麼就回傳什麼

動態網頁
- server 收到 request 後,會將
.php
檔案給 php 處理成 output,再傳給 server 後回傳 response
- 可根據用戶的點擊、輸入等操作,迅速產生響應與動態變化,例如部落格、留言板等

PHP 是什麼?
PHP 全名是 Hypertext Preprocessor(超文本預處理器)。和 ASP、JSP 等都是動態網頁開發語言。
PHP 語言是伺服器端(Server)執行的網頁,因此 PHP 必須在伺服器端執行完後,再將結果回傳給用戶端(Clint)的瀏覽器檢視並渲染。
Apache、PHP 與資料庫運作原理

執行步驟大致如下:
- server 接收 request
- server 轉給 php 處理
- php 處理成 html
- 將 output 傳給 server
- server 回傳 response
由此可知,後端最重要的是「伺服器程式」。若沒有伺服器程式,網站會直接掛掉;但沒有後端語言,就只是變回靜態網站,檔案內容是什麼就回傳什麼。
參考資料:PHP新手指南:3分鐘快速認識PHP
PHP 基礎語法
- php 語法以
<? php
開頭,?>
結尾包起來,沒有包含在其中的程式碼,就是單純的 html,會直接被顯示出來
- 每句結尾須加上分號
;
- 變數均以
$
符號開頭
- 不需要宣告變數,直接賦值即可使用
- 字串連接用
.
,數字相加用 +
迴圈
寫法和其他程式語言差不多,惟須注意變數前要加 $
:
結果如下:

陣列 array
sizeof()
:返回單元中的元素數量,和 count()
功能相同。
- 輸出完整陣列:
var_dump()
:輸出 index => 型態和值:type(value)
print_r()
:較簡潔,輸出 index => 值:[value]
其他函式
data("Y-m-d H:i:s")
:輸出現在時間
資料庫系統 Database System
- 資料庫系統(Database System):專門管理資料庫的程式
- 資料庫(Database):儲存資料的地方,可視為多個資料表的集合
之所以要有資料庫系統,利用現成的資料庫介面,我們能夠快速進行新增、修改、查看、刪除資料等操作,方便管理檔案與維護。
關聯式資料庫(RDBMS)
- 全名是 Relational Database Management System
- 以 SQL 語言(專門用來管理與查詢關聯式資料庫)操作
- 用不同 table 存取不同類型的內容,但資料之間保有相關性,避免不相關的資料互相干擾
- 常見程式:MySQL、PostgreSQL、Microsoft SQL Server
- 例如:會員資料庫,其中明確關聯是會員 ID
非關聯式資料庫(NoSQL)
- 全名是 Not Only SQL
- 以 NoSQL 語言操作
- 彈性較高,沒有形態上的限制,可儲存較複雜的資料
- 常見程式:mongoDB
- 例如:存取 log 日誌、社群上的大量資訊(按讚數)
如何管理資料庫
我們可分別利用 CLI 或 GUI 介面來進行管理:
- CLI:mysql connect,在終端機下指令連線
- GUI:phpMyAdmin、Adminer、Sequel Pro 等,利用網頁介面連線
phpMyAdmin
phpMyAdmin 是一套基於 PHP 寫的 GUI 資料庫管理軟體,其本質就是一個 PHP 檔案,讓管理者能夠以 GUI 介面來管理 MySQL 資料庫。
可從 http://localhost:8080
點選 phpmyadmin 進入:

管理介面如下所示:

Table schema 結構簡介
Table schema(資料庫結構),當我們在開資料庫以前,要先進行資料型態、有無預設值、是否為唯一等設定,而之後的資料均須符合當初設定的結構,否則會無法成功新增。
資料型態
- id:
int
- 勾選 ai(auto increment)為保證遞增,但 id 不一定為連續
- 設定 primary index:代表是唯一值
- VARCHAR:適合存取較短的資料,可設定長度。通常用於:預期資料有特定長度的情況。
- TEXT:適合存取較長的資料,不可設定長度。通常用於:留言板、部落格文章。
- 通常建議使用 VARCHAR,查詢速度較快,且能夠有效減少資料庫文件大小。
- 日期:datetime、預設值改成 current timestamp
參考資料:mysql中char,varchar與text類型的區別和選用
索引 index
可作為書本的目錄,建立某欄位的索引,目的是加快搜尋速度。
Index:索引鍵
Primary Key(PK):主鍵
- 每個 table 只能有一個 Primary Key
- 不能為空值、不能重複,是 table 裡面最主要的欄位
- 當設置某欄位為 Primary Key 時,該欄位會自動加上 unique index
Unique Index:不重複鍵
參考資料:[SQL 基本觀念] primary Key / Index / Unique 差別
MySQL 基礎語法
查詢資料 SELECT
- 使用
*
查詢全部資料:SELECT * FROM 資料夾名稱
- 使用
where
條件設定:SELECT * FROM 資料夾名稱 WHERE 條件
新增資料 INSERT
修改資料 UPDATE
刪除資料 DELETE
從前端傳資料給後端
前端通常利用 form
來傳送資料給後端:
- form 要設定 method 和 action 屬性
- method:方法,
GET
或 POST
- action:接收資料的程式
- 先在 index.php 檔案建立表單
在瀏覽器開啟表單如下:

- 在接收資料的 test.php 檔案撰寫 php 語法
在前端以 GET 方法提交表單,資料會以 Query String 的形式將加在網址後方:

用 PHP 操作 MySQL
從 PHP 連線到 MySQL 資料庫
conn.php
- 存放帳密等重要資料,需加入 git.ignore 不進行版本控制
讀取資料
新增資料
刪除資料
編輯資料
參考資料:
- [第九週]後端基礎— 基本運作原理(搭配 XAMPP) - Mia
- [第九週]後端基礎 — PHP 基礎語法- Mia
- 後端基礎 - PHP、SQL、Database - RZ-Huang
- 後端基礎 PHP 與 MySQL - Ruofan Wei