php数据库实现
PHP 数据库实现方法
PHP 与数据库交互通常通过扩展或原生 PDO(PHP Data Objects)实现。以下是常见的实现方式:
使用 PDO 连接数据库
PDO 是 PHP 提供的轻量级数据库访问抽象层,支持多种数据库(MySQL、PostgreSQL 等)。
$dsn = 'mysql:host=localhost;dbname=test_db';
$username = 'username';
$password = 'password';
try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
执行 SQL 查询
通过 PDO 预处理语句防止 SQL 注入:
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(['email' => $user_email]);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
使用 MySQLi 扩展
MySQLi 是专门针对 MySQL 的扩展,支持面向对象和过程化两种风格:
$mysqli = new mysqli('localhost', 'username', 'password', 'test_db');
if ($mysqli->connect_errno) {
die('Connect error: ' . $mysqli->connect_error);
}
$res = $mysqli->query("SELECT id FROM products");
while ($row = $res->fetch_assoc()) {
echo $row['id'];
}
事务处理示例
通过 PDO 实现事务确保数据一致性:
$pdo->beginTransaction();
try {
$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();
}
数据库操作最佳实践
参数化查询
始终使用预处理语句避免 SQL 注入:
$stmt = $pdo->prepare("INSERT INTO posts (title, content) VALUES (?, ?)");
$stmt->execute([$title, $content]);
错误处理
启用异常模式捕获数据库错误:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
连接管理
使用单例模式或依赖注入管理数据库连接,避免重复创建连接。
ORM 工具推荐
对于复杂项目,可考虑使用 ORM 框架:
- Laravel Eloquent
- Doctrine
- RedBeanPHP
性能优化建议
- 为常用查询字段添加索引
- 批量插入时使用多行插入语法
INSERT INTO table (col1, col2) VALUES (v1, v2), (v3, v4); - 避免 SELECT *,只查询必要字段
- 长连接考虑使用连接池(如 Swoole)
以上方法涵盖了 PHP 数据库操作的核心场景,根据项目需求选择适合的方案即可。







