簡介
<?php
// 包在裡面才會被當作是 php 的內容
// 每行結尾必須要有分號 ;
echo "123"; // 輸出 123
echo "<h1>ABC</h1>";
$a = "Za ";
// $ 代表設變數的意思,任何變數的最前面必定有 $
$b = "Warudo!!!"
echo $a . $b; // 輸出 $a 和 $b 兩個變數字串拼接的內容
?>
設變數
<?php
$a = "Za ";
// $ 代表設變數的意思,任何變數的最前面必定有 $
$b = "Warudo!!!"
echo $a . $b; // 輸出 $a 和 $b 兩個變數字串拼接的內容
?>
陣列 array
<?php
$arr = array(1, 2, 3, 4, 5);
echo $arr[0]; // 輸出 arr 中 index 為 0 的內容
echo "length" . sizeof($arr); // sizeof() 是 arr 的長度
var_dump($arr); // 輸出 type, value
print_r($arr); // 輸出 value
?>
資料庫系統 MySQL
SQL 與 NoSQL
- SQL
- 關聯式資料語言 (Structured Query Language)
- 是一種專門拿來操作關聯式資料庫的程式語言,簡單來說就是用指令去操作資料庫
- 其中比較有名的系統是 MySQL 與 PostgreSQL
- NoSQL
- 非關聯式資料語言 (Not Only SQL)
- 相較於 SQL 只能儲存單一型態的資料,NoSQL 可以儲存的資料更複雜一些,比較常用於存 log 日誌
- 優點是比較彈性,若要新增欄位則不用去更改資料庫設計
- 比較有名的系統是 mongoldb
簡單來說
- Server:專門處理 Request 和 Response 的程式
- 資料庫系統:專門處理資料的程式
查詢資料 Select
語法:
SELECT column FROM table;
SELECT
語句由以下列表中所述的幾個子句組成:
SELECT
之後是逗號分隔列或星號(*
)的列表,表示要返回所有列。FROM
指定要查詢數據的表或視圖。JOIN
根據某些連接條件從其他表中獲取數據。WHERE
過濾結果集中的行。GROUP BY
將一組行組合成小分組,並對每個小分組應用聚合函數。HAVING
過濾器基於GROUP BY
子句定義的小分組。ORDER BY
指定用於排序的列的列表。LIMIT
限制返回行的數量。
語句中的 SELECT
和 FROM
語句是必須的,其他部分是可選的。
範例
SELECT * FROM `QQ`;
SELECT id as nama FROM `QQ` WHERE username = 'gg' and id = '2';
新增資料 Insert
- 新增單行資料
語法:
INSERT INTO table(column1,column2...) VALUES (value1,value2,...);
- 插入多行資料
語法:
INSERT INTO table(column1,column2...)
VALUES (value1,value2,...),
(value1,value2,...),
...;
修改資料 Update
語法:
UPDATE [LOW_PRIORITY] [IGNORE] table_name
SET
column_name1 = expr1,
column_name2 = expr2,
...
WHERE
condition;
- 首先,在
UPDATE
關鍵字後面指定要更新數據的表名。 - 其次,
SET
子句指定要修改的列和新值。要更新多個列,請使用以逗號分隔的列表。以字面值,表達式或子查詢的形式在每列的賦值中來提供要設置的值。 - 第三,使用
WHERE
子句中的條件指定要更新的行。WHERE
子句是可選的。 如果省略WHERE
子句,則UPDATE語句將更新表中的所有行。
WHERE
非常重要,如果忘記寫上WHERE
子句,會意外更新表中的所有行。
刪除資料 Delete
語法:
DELETE FROM table_name WHERE condition;
WHERE
在這一項非常重要,沒有加上WHERE
則系統會對所有行進行動作,即會刪除所有資料。
一般不會使用 DELETE
,因為一旦刪除了就找不回這筆資料;相對應的做法是在 table 中加上 is_deleted
這行來操作內容是否顯示該筆資料。
修改表格屬性
- 修改表格名稱
ALTER TABLE old_table_name RENAME TO new_table_name;
- 修改屬性(設定唯一值)
ALTER TABLE table_name ADD unique(`username`);
PHP 與 MySQL 的互動
連線
通常會另外寫一個連線的 php 檔(檔名 conn.php
),其他 php 檔可以用 require_once('conn.php');
來引用 conn.php
。
<?php
$server_name = 'localhost';
$username = 'DIO';
$password = 'DIO';
$db_name = 'DIO';
$conn = new mysqli($server_name, $username, $password, $db_name);
if ($conn->connect_error) {
die('資料庫連線錯誤:' . $conn->connect_error);
} // 判斷是否連線成功,沒有成功的話就直接死(結束這個程式)
$conn->query('SET NAMES UTF8'); // 改變編碼以免打中文出現亂碼
$conn->query('SET time_zone = "+8:00"'); // 把時區設定為台灣時區
?>
因為
conn.php
內有包含密碼等敏感資料,所以要公開程式原始檔時(例如上傳 GitHub),會避免把這個conn.php
也一起公開。
上傳到 GitHub 之後資料很難清掉,參考 [ 狀況題 ] 如何徹底將檔案從 Git 中移除?
讀取資料
fetch_array()
將讀出的資料同時以數字與欄位名稱各自存一次在陣列之中,相當於同一個值會出現兩次。fetch_assoc()
將讀出的資料 Key 值設定為該欄位的欄位名稱。fetch_row()
將讀出的資料 Key 值設定為依序下去的數字。
<?php
require_once('conn.php');
$result = $conn->query("select * from users;");
if(!$result) {
die($conn->error);
}
// while 這個寫法把每一筆資料都撈出來
while ($row = $result->fetch_assoc()) {
echo "id: " . $row['id'] . '<br>';
echo "username: " . $row['username'] . '<br>';
}
?>
新增資料
建立一個新增資料的 add.php
<?php
require_once('conn.php');
if (empty($_POST['username'])) {
die('請輸入 username');
}
$username = $_POST['username'];
$sql = "insert into users(username) values('" . $username ."')";
// 或改寫為
$sql = sprintf(
"insert into users(username) values('%s')",
$username
);
$result = $conn->query($sql);
if (!$result) {
die($conn->error);
}
header("Location: index.php"); // 引導回 index.php
?>
刪除資料
建立一個刪除資料的 delete.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) { // 判斷被影響的列數
echo '刪除成功';
} else {
echo '查無資料'; // 如果是零列那就是沒有東西被刪除(原本就不存在)
}
header("Location: index.php");
?>
編輯資料
建立一個編輯資料的 update.php
<?php
require_once('conn.php');
if (empty($_POST['id']) || empty($_POST['username'])) {
die('請輸入 id 與 username');
}
$id = $_POST['id'];
$username = $_POST['username'];
$sql = sprintf(
"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");
?>
連結功能到主頁面 php
然後將上述功能的 php 檔都連結到 index.php
<?php
require_once('conn.php');
$result = $conn->query("SELECT * FROM users ORDER BY id ASC;");
if(!$result) {
die($conn->error);
}
while ($row = $result->fetch_assoc()) {
echo "id: " . $row['id'];
echo " <a href='delete.php?id=" . $row['id'] . "'>刪除</a>";
echo '<br>';
echo "username: " . $row['username'] . '<br>';
}
?>
<h2>新增 user</h2>
<form method="POST" action="add.php">
username: <input name="username" />
<input type="submit" />
</form>
<h2>編輯 user</h2>
<form method="POST" action="update.php">
id: <input name="id" />
username: <input name="username" />
<input type="submit" />
</form>