# 4. 使用PHP從web存取你的MySQL資料庫
{%hackmd QnyEFBdERZebn4iQDXNPnA %}
## 本章重點:使用PHP與資料庫進行連線
## 01 Web資料庫結構如何工作?

[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)-資料來源名稱
//含有連接資料庫所需的所有參數
```