> 此篇內容引用並改寫自 [[week9] 給自己看的 PHP 和 MySQL 溝通](https://www.coderbridge.com/@v61265/8921fe75187241afa37001cc1a139595?utm_source=coderbridge-com&utm_medium=indie_related_post_title&utm_campaign=Leetcode%20%E5%88%B7%E9%A1%8C%20pattern%20-%20Fast%20&%20Slow%20Pointer_[week9]%20%E7%B5%A6%E8%87%AA%E5%B7%B1%E7%9C%8B%E7%9A%84%20PHP%20%E5%92%8C%20MySQL%20%E6%BA%9D%E9%80%9A_@v61265)
# MySQL 是什麼?
MySQL 是一種關聯式資料庫。
## 關聯式資料庫
+ 儲存格式為 table (資料表)
+ 資料表之間互相關聯(共用 id 、學號等等)
+ 結構穩定,但相對彈性低
+ 常見如 MySQL、PostgreSQL、Microsoft SQL Server、SQLite
## 非關聯式資料庫
又叫 NoSQL
+ 用不同型態儲存,因此資料可放的型態也更多元(例如陣列)
+ 結構較不明顯,因此彈性更高
+ 常見如 mongodb。
## phpMyAdmin
本文使用的系統 MariaDB 是 MySQL 的分支,我們可以選擇使用 CLI 和資料庫溝通,也可以用 GUI 例如 phpmyadmin 。
## 基礎語法
基礎語法以大寫表示,但實際執行時小寫也可以, 資料表(table name)的反引號可以省略。
### 新增資料:
``` sql
INSERT INTO `資料表名稱` (欄位名稱1, 欄位名稱2, 欄位名稱3, ...)
VALUES (欄位值1, 欄位值2, 欄位值3, ...);
```
範例:
``` sql
INSERT INTO comments (nickname, username, content)
VALUES ('Leonardo', 'leo123456', 'Hi, my name is Leo.');
```
### 選取資料
一次選取所有欄位:
``` sql
SELECT * FROM 資料表名稱 WHERE 條件;
```
選取特定欄位:
``` sql
SELECT 欄位名稱1, 欄位名稱2 ... FROM 資料表名稱 WHERE 條件;
```
範例:
``` sql
SELECT * FROM students ORDER BY grades DESC;
```
註:
1. WHERE 條件為自定義條件可加可不加,若有多個條件可用 AND 或 OR 連接
2. ORDER BY 為自定義條件可加可不加,ASC 為升冪; DESC 為降冪
### 更新資料
``` sql
UPDATE 資料表名稱
SET 欄位名稱1 = 欄位值2, 欄位名稱2 = 欄位值2, ...
WHERE 條件;
```
範例:
``` sql
UPDATE students
SET gender = 0, grades = 88
WHERE id = 1;
```
註:若更新資料沒設定條件則會影響所有被選取欄位
### 刪除資料
``` sql
DELETE FROM 資料表名稱 WHERE 條件;
```
範例:
``` sql
DELETE FROM students WHERE id = 6;
```
# PHP 和資料庫連線:MySQLi
``` php
<?php
$conn = new mysqli(主機名稱, 使用者名稱, 密碼, 資料庫名稱);
// 錯誤處理
if ($conn->connect_error) {
die('資料庫連線錯誤:' . $conn->connect_error);
}
?>
```
範例:
``` php
<?php
$localhost = 'localhost';
$user_name = 'wei';
$password = '1234';
$db_name = 'week9';
$conn = new mysqli($localhost, $user_name, $password, $db_name);
// 錯誤處理
if ($conn->connect_error) {
die('資料庫連線錯誤:' . $conn->connect_error);
}
//設定檔案格式與時區
$conn->query('SET NAMES UTF8');
$conn->query('SET time_zone = "+8:00"');
?>
```
## PHP 筆記
+ PHP 語法以 `<?php` 開頭,以 `?>` 結尾
+ 連接字串使用點點 `.`,對比 JavaScript `+`
+ 存取物件屬性使用 `->`,對比 JavaScript `.`
+ 變數以錢符號 `$` 開頭,PHP 沒有創建變數宣告直接賦值即可
+ 若想在函式內使用全域變數,需先在變數前加上 global
### 常用函式
+ `exit()`:同 `die()`,輸出一個消息並且退出當前腳本。
+ `isset()`:檢查是否有此變數,回傳布林值(對isset來說,把變數值設為 NULL 等於變數不存在,因此會回傳 false)
+ `empty()`:檢查是否有值,回傳布林值