ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 数据库抽象层 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(); } ```