> 此篇內容引用並改寫自 [[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()`:檢查是否有值,回傳布林值