- PHP 教程
- PHP - 首页
- PHP - 简介
- PHP - 安装
- PHP - 历史
- PHP - 特性
- PHP - 语法
- PHP - Hello World
- PHP - 注释
- PHP - 变量
- PHP - Echo/Print
- PHP - var_dump
- PHP - $ 和 $$ 变量
- PHP - 常量
- PHP - 魔术常量
- PHP - 数据类型
- PHP - 类型转换
- PHP - 类型混杂
- PHP - 字符串
- PHP - 布尔值
- PHP - 整数
- PHP - 文件与I/O
- PHP - 数学函数
- PHP - Heredoc & Nowdoc
- PHP - 复合类型
- PHP - 文件包含
- PHP - 日期与时间
- PHP - 标量类型声明
- PHP - 返回类型声明
- PHP 运算符
- PHP - 运算符
- PHP - 算术运算符
- PHP - 比较运算符
- PHP - 逻辑运算符
- PHP - 赋值运算符
- PHP - 字符串运算符
- PHP - 数组运算符
- PHP - 条件运算符
- PHP - 展开运算符
- PHP - 空值合并运算符
- PHP - 比较符运算符
- PHP 控制语句
- PHP - 决策
- PHP - If…Else 语句
- PHP - Switch 语句
- PHP - 循环类型
- PHP - For 循环
- PHP - Foreach 循环
- PHP - While 循环
- PHP - Do…While 循环
- PHP - Break 语句
- PHP - Continue 语句
- PHP 函数
- PHP - 函数
- PHP - 函数参数
- PHP - 按值传递
- PHP - 按引用传递
- PHP - 默认参数
- PHP - 具名参数
- PHP - 可变参数
- PHP - 返回值
- PHP - 传递函数
- PHP - 递归函数
- PHP - 类型提示
- PHP - 变量作用域
- PHP - 严格类型
- PHP - 匿名函数
- PHP - 箭头函数
- PHP - 可变函数
- PHP - 局部变量
- PHP - 全局变量
- PHP 超全局变量
- PHP - 超全局变量
- PHP - $GLOBALS
- PHP - $_SERVER
- PHP - $_REQUEST
- PHP - $_POST
- PHP - $_GET
- PHP - $_FILES
- PHP - $_ENV
- PHP - $_COOKIE
- PHP - $_SESSION
- PHP 文件处理
- PHP - 文件处理
- PHP - 打开文件
- PHP - 读取文件
- PHP - 写入文件
- PHP - 文件是否存在
- PHP - 下载文件
- PHP - 复制文件
- PHP - 追加文件
- PHP - 删除文件
- PHP - 处理CSV文件
- PHP - 文件权限
- PHP - 创建目录
- PHP - 列出文件
- 面向对象的PHP
- PHP - 面向对象编程
- PHP - 类和对象
- PHP - 构造函数和析构函数
- PHP - 访问修饰符
- PHP - 继承
- PHP - 类常量
- PHP - 抽象类
- PHP - 接口
- PHP - 特性
- PHP - 静态方法
- PHP - 静态属性
- PHP - 命名空间
- PHP - 对象迭代
- PHP - 封装
- PHP - final 关键字
- PHP - 重载
- PHP - 克隆对象
- PHP - 匿名类
- PHP Web 开发
- PHP - Web 概念
- PHP - 表单处理
- PHP - 表单验证
- PHP - 表单邮件/URL
- PHP - 完整表单
- PHP - 文件包含
- PHP - GET & POST
- PHP - 文件上传
- PHP - Cookie
- PHP - Session
- PHP - Session 选项
- PHP - 发送邮件
- PHP - 净化输入
- PHP - Post-Redirect-Get (PRG)
- PHP - Flash 消息
- PHP 高级
- PHP - MySQL
- PHP.INI 文件配置
- PHP - 数组解构
- PHP - 代码规范
- PHP - 正则表达式
- PHP - 错误处理
- PHP - Try…Catch
- PHP - Bug 调试
- PHP - 针对 C 开发者
- PHP - 针对 PERL 开发者
- PHP - 框架
- PHP - Core PHP vs 框架
- PHP - 设计模式
- PHP - 过滤器
- PHP - JSON
- PHP - 异常
- PHP - 特殊类型
- PHP - 哈希
- PHP - 加密
- PHP - is_null() 函数
- PHP - 系统调用
- PHP - HTTP 认证
- PHP - 交换变量
- PHP - Closure::call()
- PHP - 过滤后的 unserialize()
- PHP - IntlChar
- PHP - CSPRNG
- PHP - 预期
- PHP - use 语句
- PHP - 整数除法
- PHP - 已弃用的特性
- PHP - 已移除的扩展和 SAPI
- PHP - PEAR
- PHP - CSRF
- PHP - FastCGI 进程
- PHP - PDO 扩展
- PHP - 内置函数
- PHP 有用资源
- PHP - 速查表
- PHP - 问答
- PHP - 快速指南
- PHP - 在线编译器
- PHP - 有用资源
- PHP - 讨论
PHP – PDO 扩展
PDO 是 PHP 数据对象的缩写。PHP 可以与大多数关系型和 NoSQL 数据库交互。默认的 PHP 安装已经安装并启用了特定厂商的数据库扩展。除了特定类型的数据库(例如 MySQL 的 mysqli 扩展)的特定数据库驱动程序之外,PHP 还支持 PDO 和 ODBC 等抽象层。
PDO 扩展定义了一个轻量级、一致的接口,用于在 PHP 中访问数据库。每个特定厂商扩展的功能都各不相同。因此,如果您打算更改某个 PHP 应用程序的后端数据库(例如从 PostGreSql 更改为 MySQL),则需要对代码进行大量更改。另一方面,PDO API 除了指定要使用的新的数据库的 URL 和凭据外,不需要任何更改。
您当前的 PHP 安装必须具有相应的 PDO 驱动程序才能使用。目前,以下数据库支持相应的 PDO 接口:
驱动程序名称 | 支持的数据库 |
---|---|
PDO_CUBRID | Cubrid |
PDO_DBLIB | FreeTDS / Microsoft SQL Server / Sybase |
PDO_FIREBIRD | Firebird |
PDO_IBM | IBM DB2 |
PDO_INFORMIX | IBM Informix Dynamic Server |
PDO_MYSQL | MySQL 3.x/4.x/5.x/8.x |
PDO_OCI | Oracle 调用接口 |
PDO_ODBC | ODBC v3 (IBM DB2, unixODBC 和 win32 ODBC) |
PDO_PGSQL | PostgreSQL |
PDO_SQLITE | SQLite 3 和 SQLite 2 |
PDO_SQLSRV | Microsoft SQL Server / SQL Azure |
默认情况下,PDO_SQLITE 驱动程序在 php.ini 的设置中启用,因此,如果您希望使用 PDO 与 MySQL 数据库交互,请确保通过删除开头的分号取消以下行的注释。
extension=pdo_mysql
您可以通过在 PDO 类中调用 PDO::getAvailableDrivers() 静态函数来获取当前可用的 PDO 驱动程序列表。
PDO 连接
PDO 基类的实例表示数据库连接。构造函数接受参数,用于指定数据库源(称为 DSN)以及可选的用户名和密码(如果有)。
以下代码段是建立与 MySQL 数据库连接的典型方法:
<?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); ?>
如果存在任何连接错误,将抛出 PDOException 对象。
示例
请查看以下示例:
<?php $dsn="localhost"; $dbName="myDB"; $username="root"; $password=""; try{ $dbConn= new PDO("mysql:host=$dsn;dbname=$dbName",$username,$password); Echo "Successfully connected with $dbName database"; } catch(Exception $e){ echo "Connection failed" . $e->getMessage(); } ?>
它将产生以下 **输出**:
Successfully connected with myDB database
如果发生错误:
Connection failedSQLSTATE[HY000] [1049] Unknown database 'mydb'
PDO 类方法
PDO 类定义了以下静态方法:
PDO::beginTransaction
获得连接对象后,应调用此方法以启动事务。
public PDO::beginTransaction(): bool
此方法关闭自动提交模式。因此,您需要调用 commit() 方法才能对数据库进行持久性更改。调用 rollBack() 将回滚对数据库的所有更改并将连接返回到自动提交模式。此方法在成功时返回 true,失败时返回 false。
PDO::commit
commit() 方法提交事务。
public PDO::commit(): bool
由于 BeginTransaction 禁用了自动提交模式,因此您应该在事务后调用此方法。它提交事务,将数据库连接返回到自动提交模式,直到下次调用 PDO::beginTransaction() 启动新事务为止。此方法在成功时返回 true,失败时返回 false。
PDO::exec
exec() 方法执行 SQL 语句并返回受影响的行数
public PDO::exec(string $statement): int|false
exec() 方法在一个函数调用中执行 SQL 语句,返回受语句影响的行数。
请注意,它不返回 SELECT 语句的结果。如果您有一个在程序中只执行一次的 SELECT 语句,请考虑发出 PDO::query()。
另一方面,对于需要多次发出的语句,请使用 PDO::prepare() 准备一个 PDOStatement 对象,并使用 PDOStatement::execute() 发出语句。
exec() 方法需要一个表示要准备和执行的 SQL 语句的字符串参数,并返回由您发出的 SQL 语句修改或删除的行数。如果未影响任何行,则 PDO::exec() 返回 0。
PDO::query
query() 方法准备并执行不带占位符的 SQL 语句
public PDO::query(string $query, ?int $fetchMode = null): PDOStatement|false
此方法在一个函数调用中准备并执行 SQL 语句,将语句作为 PDOStatement 对象返回。
PDO::rollBack
rollback() 方法回滚由 PDO::beginTransaction() 启动的事务。
public PDO::rollBack(): bool
如果数据库设置为自动提交模式,则此函数将在回滚事务后恢复自动提交模式。
请注意,包括 MySQL 在内的一些数据库会在事务中发出 DDL 语句(例如 DROP TABLE 或 CREATE TABLE)时自动发出隐式 COMMIT,因此它将阻止您回滚事务边界内的任何其他更改。此方法在成功时返回 true,失败时返回 false。
示例
以下代码在 MySQL 服务器上的 myDB 数据库中创建一个 student 表。
<?php $dsn="localhost"; $dbName="myDB"; $username="root"; $password=""; try{ $conn= new PDO("mysql:host=$dsn;dbname=$dbName",$username,$password); Echo "Successfully connected with $dbName database"; $qry = <<<STRING CREATE TABLE IF NOT EXISTS STUDENT ( student_id INT AUTO_INCREMENT, name VARCHAR(255) NOT NULL, marks INTEGER(3), PRIMARY KEY (student_id) ); STRING; echo $qry . PHP_EOL; $conn->exec($qry); $conn->commit(); echo "Table created\n"; } catch(Exception $e){ echo "Connection failed : " . $e->getMessage(); } ?>
示例
使用以下代码在上面示例中创建的 student 表中插入新记录:
<?php $dsn="localhost"; $dbName="myDB"; $username="root"; $password=""; try { $conn= new PDO("mysql:host=$dsn;dbname=$dbName",$username,$password); echo "Successfully connected with $dbName database"; $sql = "INSERT INTO STUDENT values(1, 'Raju', 60)"; $conn->exec($sql); $conn->commit(); echo "A record inserted\n"; } catch(Exception $e){ echo "Connection failed : " . $e->getMessage(); } ?>
示例
以下PHP脚本获取学生表中的所有记录:
<?php $dsn="localhost"; $dbName="myDB"; $username="root"; $password=""; try { $conn= new PDO("mysql:host=$dsn;dbname=$dbName",$username,$password); echo "Successfully connected with $dbName database"; $sql = "SELECT * from student"; $statement = $conn->query($sql); $rows = $statement->fetchAll(PDO::FETCH_ASSOC); foreach ($rows as $row) { var_dump($row); } } catch(Exception $e){ echo "Connection failed : " . $e->getMessage(); } ?>