Back-End
php
資料庫
本篇為 [BE101] 用 PHP 與 MySQL 學習後端基礎 這門課程的學習筆記。如有錯誤歡迎指正。
學習目標:
P1 你知道 PHP 是什麼
P1 你知道前端與後端的差別
P1 你知道什麼是資料庫
P1 你了解基本的 SQL 語法,包括 Select、Insert Into、Delete 與 Update
P1 你能夠寫出基本的 CRUD 應用
P1 你知道什麼是 Session
P1 你知道什麼是 Cookie
P1 你知道 Session 與 Cookie 的差別
後端實際上包含以下三大項(括弧內為舉例使用的程式):
以下透過 XAMPP 來進行實作。XAMPP 結合了 Apache + MariaDB + PHP,能夠快速建置後端環境。
MySQL 為目前市佔率最高的資料庫系統。但 XAMPP 上使用的是 MariaDB 而非 MySQL。這是因為當初 MySQL 被甲骨文公司收購後,開發者擔心會有後患,像是轉為商用等等,於是社群就 clone 出 MariaDB ,因此這兩個系統幾乎完全相同。
http://localhost/dashboard/
,出現以下畫面就代表安裝成功!網址路徑 = 檔案路徑
<?php
echo "I am Heidi, yo!"
?>
http://localhost/heidi/test.php
網頁中的「靜態」與「動態」,並非代表視覺上的移動,兩者差異在於是否以「伺服器程式」去產生網頁上的資料。
.css
是靜態檔案)後,把檔案直接回傳 response.php
檔案給 php 處理成 output,再傳給 server 後回傳 responsePHP 全名是 Hypertext Preprocessor(超文本預處理器)。和 ASP、JSP 等都是動態網頁開發語言。
PHP 語言是伺服器端(Server)執行的網頁,因此 PHP 必須在伺服器端執行完後,再將結果回傳給用戶端(Clint)的瀏覽器檢視並渲染。
request → apache → php → output → apache → response
(server) (html)
執行步驟大致如下:
由此可知,後端最重要的是「伺服器程式」。若沒有伺服器程式,網站會直接掛掉;但沒有後端語言,就只是變回靜態網站,檔案內容是什麼就回傳什麼。
參考資料:PHP新手指南:3分鐘快速認識PHP
<? php
開頭,?>
結尾包起來,沒有包含在其中的程式碼,就是單純的 html,會直接被顯示出來;
<?php
echo "Hello World"; // 印出 Hello World
?>
$
符號開頭.
,數字相加用 +
<?php
$x = 10000;
$y = 5.5;
$str = 'hello';
echo $x + $y . '<br>'; // 印出 10005.5
echo $x . $str; // 10000hello
?>
寫法和其他程式語言差不多,惟須注意變數前要加 $
:
<?php
for ($i = 1; $i <= 5; $i++) {
echo $i . '<br>';
}
?>
結果如下:
sizeof()
:返回單元中的元素數量,和 count()
功能相同。<?php
// 建立陣列
$arr = array(1, 3, 5, 7, 9);
// 印出陣列長度:5
echo $length = sizeof($arr) . '<br>';
// 印出最後一個元素:9
echo $arr[sizeof($arr) - 1];
?>
var_dump()
:輸出 index => 型態和值:type(value)print_r()
:較簡潔,輸出 index => 值:[value]<?php
$arr = array(1, 'a', 10, 'b', 100);
echo var_dump($arr) . '<br>';
// 印出 array(5) { [0]=> int(1) [1]=> string(1) "a" [2]=> int(10) [3]=> string(1) "b" [4]=> int(100) }
print_r($arr);
// 印出 Array ( [0] => 1 [1] => a [2] => 10 [3] => b [4] => 100 )
?>
data("Y-m-d H:i:s")
:輸出現在時間之所以要有資料庫系統,利用現成的資料庫介面,我們能夠快速進行新增、修改、查看、刪除資料等操作,方便管理檔案與維護。
我們可分別利用 CLI 或 GUI 介面來進行管理:
phpMyAdmin 是一套基於 PHP 寫的 GUI 資料庫管理軟體,其本質就是一個 PHP 檔案,讓管理者能夠以 GUI 介面來管理 MySQL 資料庫。
可從 http://localhost:8080
點選 phpmyadmin 進入:
管理介面如下所示:
Table schema(資料庫結構),當我們在開資料庫以前,要先進行資料型態、有無預設值、是否為唯一等設定,而之後的資料均須符合當初設定的結構,否則會無法成功新增。
int
參考資料:mysql中char,varchar與text類型的區別和選用
可作為書本的目錄,建立某欄位的索引,目的是加快搜尋速度。
參考資料:[SQL 基本觀念] primary Key / Index / Unique 差別
SELECT
*
查詢全部資料:SELECT * FROM 資料夾名稱
SELECT * FROM users
// 從資料夾 users 裡面找到所有列,並取出所有欄位的值。
where
條件設定:SELECT * FROM 資料夾名稱 WHERE 條件
SELECT * FROM users WHERE username=heidi
// 從資料夾 users 裡面,找到 username 是 heidi 的那列,並取出該欄位的所有值。
INSERT
INSERT INTO
指令可新增資料:INSERT INTO "表格名" ("欄位1", "欄位2", ...) VALUES ("值1", "值2", ...);
INSERT INTO users(username, content) values (Peter, 1234)
// 新增一筆記錄,username 是 Peter;content 是 1234。
UPDATE
UPDATE "表格名" SET "欄位1"=[新值] WHERE "條件";
// 若沒有加上 WHERE,就會更新表中的所有行
UPDATE users SET username = "user02", content = "content02" WHERE id =2
// 修改 id 為 2 那列,username 為 user02;content 為 content02
DELETE
DELETE FROM users WHERE id = 2
// 若沒有加上 WHERE,系統會選取所有行,即刪除所有資料。
前端通常利用 form
來傳送資料給後端:
GET
或 POST
<form method="GET" action="test.php">
name: <input type="text" name="name"/>
age: <input type="text" name="age"/>
<input type="submit"/>
</form>
在瀏覽器開啟表單如下:
<?php
// 用 empty 檢查表單是否為空
if (empty($_GET['name']) || empty($_GET['age'])){
echo '資料有缺,請再次填寫<br>';
exit(); // 終止程序
};
// 接收 method 為 GET 的 From input
echo "Hello!" . $_GET['name'] . " <br>";
echo "Your age is" . $_GET['age'] . " <br>";
print_r($_GET);
?>
在前端以 GET 方法提交表單,資料會以 Query String 的形式將加在網址後方:
<?php
$server_name = 'localhost';
$username = 'heidi';
$password = 'h232425123';
$db_name = 'heidi';
// mysqli 的四個參數分別為:伺服器名稱、帳號、密碼、資料庫名稱
$conn = new mysqli($server_name, $username, $password, $db_name);
if (!empty($conn->connect_error)) {
die('資料庫連線錯誤:' . $conn->connect_error); // die():終止程序
}
?>
<?php
// 連線到資料庫
require_once('conn.php');
// 用 empty 檢查表單是否為空
if (empty($_GET['name']) || empty($_GET['age'])){
echo '資料有缺,請再次填寫<br>';
exit(); // 終止程序
};
// 接收 method 為 GET 的 From input
echo "Hello! " . $_GET['name'] . " <br>";
echo "Your age is " . $_GET['age'] . " <br>";
print_r($_GET);
?>
<?php
// 連線到資料庫
require_once('conn.php');
// $_POST['key-name'] 取得輸入的資料
// 以 empty() 判斷值是否為 null
if (empty($_POST['username'])) {
// 中斷後面程序並顯示內容,() 內可輸入訊息字串
die('請輸入 username');
}
$username = $_POST['username'];
// sprintf() 裡面可以放入替代字元
$sql = sprintf(
// 插入新欄位,%s 代表字串,值是第二個參數
"INSERT INTO users(username) VALUES('%s')",
$username
);
// 執行結果存在 $result 這個變數中
$result = $conn->query($sql);
// 確認是否有拿到結果
if (!$result) {
die($conn->error);
}
header("Location: index.php"); // 自動跳轉回 index.php
?>
<?php
// 連線到資料庫
require_once('conn.php');
if (empty($_GET['id'])) {
die('請輸入 id');
}
$id = $_GET['id'];
$sql = sprintf(
"delete from users where id = %d",
$id
);
echo $sql . '<br>';
$result = $conn->query($sql);
if (!$result) {
die($conn->error);
}
if ($conn->affected_rows >= 1) { // 判斷影響 1 列以上資料
echo '刪除成功';
} else {
echo '查無資料';
}
// header("Location: index.php");
?>
<?php
require_once('conn.php');
if (empty($_POST['id']) || empty($_POST['username'])) {
die('請輸入 id 與 username');
}
$id = $_POST['id'];
$username = $_POST['username'];
$sql = sprintf(
// 帶入兩個參數:%s(字串)、%d
"update users set username='%s' where id=%d",
$username,
$id
);
echo $sql . '<br>';
$result = $conn->query($sql);
if (!$result) {
die($conn->error);
}
header("Location: index.php");
?>
參考資料: