您好,登录后才能下订单哦!
# PHP有哪些PDO类的方法
## 目录
1. [PDO简介](#pdo简介)
2. [PDO连接数据库](#pdo连接数据库)
3. [PDO核心方法详解](#pdo核心方法详解)
- [执行SQL语句](#执行sql语句)
- [预处理语句](#预处理语句)
- [事务处理](#事务处理)
- [错误处理](#错误处理)
4. [PDOStatement类方法](#pdostatement类方法)
5. [实用技巧与最佳实践](#实用技巧与最佳实践)
6. [总结](#总结)
---
## PDO简介
PHP Data Objects(PDO)是PHP提供的数据库访问抽象层,支持多种数据库(MySQL、PostgreSQL、SQLite等)。相比传统的`mysql_*`函数,PDO具有:
- 跨数据库兼容性
- 预处理语句防SQL注入
- 面向对象接口
- 错误处理机制
---
## PDO连接数据库
```php
<?php
try {
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$pdo = new PDO($dsn, 'username', 'password', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
?>
方法 | 描述 | 示例 |
---|---|---|
exec() |
执行无返回结果的SQL(返回受影响行数) | $count = $pdo->exec("DELETE FROM users"); |
query() |
执行有返回结果的SQL(返回PDOStatement对象) | $stmt = $pdo->query("SELECT * FROM users"); |
lastInsertId() |
获取最后插入的ID | $id = $pdo->lastInsertId(); |
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute(['John', 'john@example.com']);
// 命名参数方式
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute([':id' => 42]);
try {
$pdo->beginTransaction();
$pdo->exec("UPDATE accounts SET balance = balance - 100 WHERE user_id = 1");
$pdo->exec("UPDATE accounts SET balance = balance + 100 WHERE user_id = 2");
$pdo->commit();
} catch (Exception $e) {
$pdo->rollBack();
echo "Transaction failed: " . $e->getMessage();
}
方法/常量 | 说明 |
---|---|
PDO::ERRMODE_SILENT |
静默模式(默认) |
PDO::ERRMODE_WARNING |
产生警告 |
PDO::ERRMODE_EXCEPTION |
抛出异常 |
errorCode() |
获取错误码 |
errorInfo() |
获取错误信息数组 |
当执行query()
或prepare()
后返回的对象方法:
方法 | 描述 | 示例 |
---|---|---|
execute() |
执行预处理语句 | $stmt->execute(); |
fetch() |
获取单行结果 | $row = $stmt->fetch(); |
fetchAll() |
获取所有结果 | $rows = $stmt->fetchAll(); |
bindParam() |
绑定参数到变量 | $stmt->bindParam(':id', $id); |
rowCount() |
返回受影响行数 | $count = $stmt->rowCount(); |
setFetchMode() |
设置获取模式 | $stmt->setFetchMode(PDO::FETCH_OBJ); |
常用获取模式:
- PDO::FETCH_ASSOC
:关联数组
- PDO::FETCH_NUM
:数字索引数组
- PDO::FETCH_OBJ
:对象形式
- PDO::FETCH_CLASS
:映射到指定类
$data = [
['Alice', 'alice@example.com'],
['Bob', 'bob@example.com']
];
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$pdo->beginTransaction();
foreach ($data as $row) {
$stmt->execute($row);
}
$pdo->commit();
$page = 2; $perPage = 10;
$stmt = $pdo->prepare("SELECT * FROM posts LIMIT :limit OFFSET :offset");
$stmt->bindValue(':limit', (int)$perPage, PDO::PARAM_INT);
$stmt->bindValue(':offset', (int)(($page-1)*$perPage), PDO::PARAM_INT);
$stmt->execute();
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
ini_set('display_errors', 0);
PDO提供的主要方法包括:
连接相关:
- __construct()
- getAttribute()
/setAttribute()
SQL执行:
- exec()
- query()
- prepare()
- lastInsertId()
事务控制:
- beginTransaction()
- commit()
- rollBack()
错误处理:
- errorCode()
- errorInfo()
结合PDOStatement类的方法,可以构建安全高效的数据库操作层。建议始终: 1. 使用异常模式处理错误 2. 采用预处理语句防注入 3. 根据场景选择合适的获取模式
通过合理运用这些方法,可以显著提升PHP应用的数据库安全性和可维护性。 “`
(注:实际字符数约2500字,完整2900字版本需扩展每个方法的详细示例和更多使用场景分析)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。