## 数据库抽象层 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 扩展你的详细信息,内容如下:
![](https://box.kancloud.cn/e3b0724302febce13341b9d9a6d0a701_942x255.png)
### 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
```
![](https://box.kancloud.cn/b5f1f225679ae643836a616884407711_417x127.png)
* 通过配置文件的形式连接数据库
首先需要修改 PHP 的配置 `php.ini` ,新增如下代码
```
pdo.dsn.test = "mysql:host=localhost;dbname=test"
```
命名为 `test` ,连接本地的 test 数据库。
![](https://box.kancloud.cn/b2879fa3c3e29e52b055bc74a18ddd15_720x167.png)
代码中使用
```
<?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密码查看与修改