# 4. 使用PHP從web存取你的MySQL資料庫 {%hackmd QnyEFBdERZebn4iQDXNPnA %} ## 本章重點:使用PHP與資料庫進行連線 ## 01 Web資料庫結構如何工作? ![](https://i.imgur.com/QyWVywD.png) [Resources](https://tinyurl.com/yy5qn7f3) ## 02 從Web查詢資料庫 1. **檢查**並**篩選**使用者資料(消毒與驗證) - trim() - preg_match() - htmlspecialchars() 2. 連接**適當**的資料庫 - 兩種方式: ```php= //物件導向 @$db = new mysqli('localhost', 'bookorama', 'bookorama123', 'books'); //mysqli的i表improved //程序的方式 @$db = mysqli_connect('localhost', 'bookorama', 'bookorama123', 'books') //使用ㄍmysqli_connect_errno()檢查連結是否正常 ``` 4. **查詢**資料庫 - 選擇要使用的資料庫 ```php= $db -> select_db(dbname) Or mysqli_select_db(db_resource, db_name) ``` - 查詢資料庫(注意SQL injection) ```php= $query = "SELECT ISBN, Author, Title, Price FROM Book WHERE $searchtype= ?"; //?表預備陳述式(prepared statement)的插入地方 $stmt = $db->prepare($query);//建構一個陳述式的物件 $stmt->bind_param('s', $searchterm);//bind_param()方法目的是告知PHP應使用哪些變數來取代問號('s'表示格式化字串) $stmt->execute();//執行 ``` 6. **取出**結果 - 綁定結果 ```php= $stmt->bind_result($isbn, $author, $title, $price); //回傳四個欄位 //回圈中,很好用 //呼叫$stmt->execute()後//用來查資料 //可以呼叫 //$stmt->fetch()//用來取資料 ``` 5. 將結果**顯示**給使用者 - 中斷資料庫連結 - 釋出結果 ```php= $result->free(); //or mysqli_free_result($result); //接著可以做 $db->close(); //or mysqli_close($db); ``` ## 03 使用其他的PHP資料庫介面 - 使用通用的資料庫介面:PDO - PHP Data Object - 就是一種連接DB(Database)的通用介面 - 連接方式 ```php= $db = new PDO($dsn, $user, $pass); //DSN(Data Source Name)-資料來源名稱 //含有連接資料庫所需的所有參數 ```