MySQL Introduction
MySQL是一種relational資料庫,當安裝XAMPP時也同時安裝,可以直接使用。使用前先打開XAMPP Control Panel並點選MySQL的Start。
php6_1_mysqlConnection.php
- 使用mysqli_connect("hostname","username", "password", "database")函數連結至資料庫,第一個參數指連結至localhost(也可以使用127.0.0.1),因為使用預設的設定,所以後續參數使用root且沒有password。
- 使用mysqli_connect_error()顯示錯誤訊息,mysqli_get_host_info($link)顯示host的資訊。
- 連結至資料庫可使用以下方式:
-
mysqli_connect()。
-
new mysqli()。
-
使用PDO。
php6_1_PDO.php
Database
連結資料庫後可以建立一個database,使用sql的
CREATE DATABASE語法。
php3_4_time.php
- 使用mysqli_query()方法查詢資料庫,mysqli_error($link)傳回錯誤。
- 如果連續執行兩次,第二次會出現錯誤,因為database已存在。
- 若要刪除database,使用DROP DATABASE test。
Create Table
建立了database之後,可以在其內建立table,用以儲存資料,可使用sql的
CREATE TABLE語法。
php6_2_createTable.php
- 因為要建立的table位於test(已建立)這個database內,所以在connect的時候參數要加上database(test)的名稱。
- sql CREATE TABLE語法:
-
在CREATE TABLE後加上table的名稱(charaters)。
-
id為整數(int),不能為空,為primary key且會自動增加。
-
name, race為字元,括號內數字為長度,name為唯一(unique)。
- 若要刪除table,使用DROP TABLE characters語法。
Insert
有了table之後便可以開始加入資料,使用sql的
INSERT INTO語法。
php6_3_insert.php
- 使用INSERT INTO tablename(attributes) VALUES(values)來加入一筆資料,若是VALUES(values),(values),(values)可加入多筆資料。
- 因為id設定為AUTO_INCREMENT,所以不需要寫入,會自動產生。
- 為了顯示內容資料,使用SELECT * FROM characters語法來選擇所有資料。
-
mysqli_num_rows($result)可取得行數。
-
mysqli_fetch_array($result)可取得一筆資料,且該資料儲存為array,並將pointer移往下一筆資料。亦可使用$row[0],$row[1],$row[2]等來取得資料。
-
mysqli_free_result($result)可釋放$result的記憶體。
INSERT FORM
當然希望可以從網頁讓使用者輸入資料然後儲存到資料庫,所以需要設計輸入表單。
php6_3_insertForm.php
然後設計對應的php檔案來處理輸入。
php6_3_formInsertion.php
- mysqli_real_escape_string()函數可產生可使用於sql語法的合法sql字串,儘管如此,在VALUES中還是需要使用引號('$name', '$race', '$occupation', '$level')。
- 使用mysqli_insert_id($link)方法取得輸入資料的ID,可協助我們追蹤資訊或做後續用途。
Prepared Statement
Prepared Statement是先將要輸入的資料格式準備好,然後再根據格式加入資料的方式。
php6_3_prepared.php
- 一樣使用php6_3_insertForm.php所產生的表格來輸入要增加的資料,要記得修改action="php6_3_prepared.php",因為此次要使用另一個方式來insert輸入的資料。
- Prepared Statment的sql語法中,VALUES的值皆設為?,再在之後加入。
- 使用mysqli_prepare($link, $query)來準備SQL語法並等著被執行。
- 使用mysqli_stmt_bind_param($stmt, $type, $var)來連結變數與一個prepared statement。
- $type字串用來指稱每個變數的型態。
-
i: integer。
-
d: double。
-
s: string。
-
b: binary(image, PDF file, etc.)。
- 所以"sssi"的意思便是前三個輸入為字串,最後一個為整數。
- 使用mysqli_stmt_execute($stmt)來執行準備好的query($stmt),成功時會將資料insert到資料庫。
Select, Where, Limit & Order by
之前已經使用過SELECT * FROM characters的sql語法來選擇table characters內的所有資料,使用關鍵字
SELECT選擇,
*號表示所有。若是要使用其他條件來篩選資料,可使用關鍵字
WHERE,若是要限制產生數量,則使用關鍵字
LIMIT。
php6_5_select.php
- WHERE, ORDER BY跟LIMIT不需同時出現,但出現順序須為WHERE, ORDER BY, LIMIT。
- ORDER BY可使用ASC(升冪)或DESC(降冪)修飾。
- LIMIT 1, 3表示1,2,3三筆資料,從0開始算起,若是僅有一個數字(e.g. LIMIT 3),表示限定前3筆資料。
And & Or
php6_5_selectAndOr.php
- 使用AND與OR關鍵字來產生邏輯性選擇。
- 使用IN關鍵字來選擇某些特定數值,使用BETWEEN關鍵字來選擇某範圍內的值。
Update & Delete
使用
UPDATE關鍵字來更新資料,使用
DELETE關鍵字來刪除資料。
UPDATE
php6_6_update.php
- 使用SET關鍵字設定某欄位的值,使用WHERE來選擇被修改的資料。
DELETE
php6_6_delete.php
- 使用DELETE FROM characters WHERE id=11語法來刪除,其中WHERE用來選擇欲刪除之資料。
- 再次提醒若要刪除整個TABLE或是DATABASE,使用DROP關鍵字。
Alter
若是要改變欄位,可以使用關鍵字
ALTER。
php6_6_alter.php
- 使用ADD關鍵字來增加欄位。
- 使用DEFAULT關鍵字來給初始值。