## 數據庫抽象層 PDO
### 什么是 PDO
PDO(PHP Data Object),數據庫訪問抽象層,統一各種數據庫的訪問接口。
PDO支持的數據庫有如下(數據來自 [php 官方網站](http://php.net/manual/zh/pdo.drivers.php))
| 驅動名稱 | 支持的數據庫 |
| --- | --- |
| [PDO_CUBRID](http://php.net/manual/zh/ref.pdo-cubrid.php) | Cubrid |
| [PDO_DBLIB](http://php.net/manual/zh/ref.pdo-dblib.php) | FreeTDS / Microsoft SQL Server / Sybase |
| [PDO_FIREBIRD](http://php.net/manual/zh/ref.pdo-firebird.php) | Firebird/Interbase 6 |
| [PDO_IBM](http://php.net/manual/zh/ref.pdo-ibm.php) | IBM DB2 |
| [PDO_INFORMIX](http://php.net/manual/zh/ref.pdo-informix.php) | IBM Informix Dynamic Server |
| [PDO_MYSQL](http://php.net/manual/zh/ref.pdo-mysql.php) | MySQL 3.x/4.x/5.x |
| [PDO_OCI](http://php.net/manual/zh/ref.pdo-oci.php) | Oracle Call Interface |
| [PDO_ODBC](http://php.net/manual/zh/ref.pdo-odbc.php) | ODBC v3 (IBM DB2, unixODBC and win32 ODBC) |
| [PDO_PGSQL](http://php.net/manual/zh/ref.pdo-pgsql.php) | PostgreSQL |
| [PDO_SQLITE](http://php.net/manual/zh/ref.pdo-sqlite.php) | SQLite 3 及 SQLite 2 |
| [PDO_SQLSRV](http://php.net/manual/zh/ref.pdo-sqlsrv.php) | Microsoft SQL Server / SQL Azure |
| [PDO_4D](http://php.net/manual/zh/ref.pdo-4d.php) | 4D |
### PDO 安裝與擴展
* 配置 php.ini 配置文件,開啟相應的擴展
```
extension = php_pdo.dll
```
* 開啟對應數據庫的擴展,這里以 MySQL 為例。
```
extension = php_pdo_mysql.dll
```
* 通過查看 `phpinfo();` 可以看到 PDO 擴展你的詳細信息,內容如下:

### PDO 的使用
* 通過參數的形式連接數據庫
```
<?php
try {
$dsn = 'mysql:host=localhost;dbname=test'; // 數據源
$username = 'root'; // 數據庫用戶名
$passwd = 'aaaaaa'; // 數據庫密碼
$pdo = new PDO($dsn, $username, $passwd);
print_r($pdo); // 返回 PDO Object ( )
} catch (PDOException $e) {
echo $e->getMessage();
}
```
* 通過 URI 的形式連接數據庫
```
<?php
try {
$dsn = 'uri:file:///Applications/MAMP/htdocs/Study/Pdo/dsn.txt'; // 數據源 其中 /Applications/MAMP/htdocs/Study/Pdo/dsn.txt 為文件 dsn.txt 路徑
$username = 'root'; // 數據庫用戶名
$passwd = 'aaaaaa'; // 數據庫密碼
$pdo = new PDO($dsn, $username, $passwd);
print_r($pdo); // 返回 PDO Object ( )
} catch (PDOException $e) {
echo $e->getMessage();
}
```
其中需要配置一個單獨的文件 `dsn.txt`,文件內容如
```
mysql:host=localhost;dbname=test
```

* 通過配置文件的形式連接數據庫
首先需要修改 PHP 的配置 `php.ini` ,新增如下代碼
```
pdo.dsn.test = "mysql:host=localhost;dbname=test"
```
命名為 `test` ,連接本地的 test 數據庫。

代碼中使用
```
<?php
try {
$dsn = 'test'; // 在 php.ini 中定義的名稱
$username = 'root'; // 數據庫用戶名
$passwd = 'aaaaaa'; // 數據庫密碼
$pdo = new PDO($dsn, $username, $passwd);
print_r($pdo); // 返回 PDO Object ( )
} catch (PDOException $e) {
echo $e->getMessage();
}
```
- 寫在前面
- MySQL的使用
- MySQL多表同時刪除方案
- MySQL跨表、多表更新SQL語句總結
- MySQL存儲引擎
- 安裝
- 常規方式編譯安裝MySQL
- 采用cmake方式編譯安裝MySQL
- 使用rpm包安裝MySQL
- 使用yum方式安裝MySQL
- 采用二進制方式免編譯安裝MySQL
- 多實例的安裝
- 什么是多實例
- 多實例的作用、問題以及應用場景
- 多實例安裝01【推薦】
- 多實例官方安裝方案02
- 啟動、用戶和權限管理
- 單實例MySQL的啟動和關閉的方法
- 設置及修改MySQL root用戶密碼
- 找回丟失的MySQL root用戶密碼
- 創建MySQL用戶及用戶權限管理
- 基礎命令的操作
- MySQL庫和表相關操作
- MySQL中的索引操作
- MySQL常用命令
- MySQL的錯誤代碼
- MySQL復習秘籍
- 備份與恢復
- 備份
- 恢復
- mysqlbinlog命令
- 服務日志
- 主從復制
- 主從復制部署配置問題匯總
- 主從復制讀寫分離
- 災難恢復
- 配置phpmyadmin連接多實例MySQL
- 其他相關
- Sphinx實驗
- 中文分詞技術
- MySQL語句大全
- 用戶創建、權限、刪除
- 數據庫與表顯示、創建、刪除
- 表復制及備份還原
- 數據庫表中數據操作
- 修改表的列與表名
- 修改表中的數據
- 查詢表
- 日志
- 批量修改Mysql表引擎為InnoDB的方法
- 數據庫抽象層 PDO
- PDO對象常用方法
- PDO 事務處理
- PDO 與 MySQLi 二者效率簡單比較
- 大小寫敏感性 lower_case_table_names
- CentOS7安裝MySQL5.7密碼查看與修改