php中调用数据库,如何正确连接与执行查询?
- 虚拟主机
- 2025-12-16
- 6
在PHP中调用数据库是Web开发中的常见操作,通常用于与MySQL、MariaDB、PostgreSQL等数据库进行交互,以下是详细的操作步骤和注意事项,帮助开发者高效、安全地完成数据库调用。
选择合适的数据库扩展,PHP提供了多种数据库扩展,如MySQLi(MySQL增强版)、PDO(PHP数据对象)等,MySQLi专为MySQL设计,支持面向过程和面向对象两种编程方式;PDO则支持多种数据库,具有更好的跨平台性,推荐使用PDO,因为它预处理语句功能可以有效防止SQL载入攻破。

建立数据库连接,使用PDO时,需创建一个PDO对象,传入数据库类型、主机名、数据库名、用户名和密码等参数。$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');,为确保连接安全,建议设置错误模式为异常:$pdo>setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);,连接成功后,可以通过$pdo>exec()执行非查询语句(如INSERT、UPDATE、DELETE),或通过$pdo>query()执行查询语句(如SELECT)。
执行查询语句时,通常需要处理结果集,PDO提供了多种获取数据的方式,如fetch()获取单行数据、fetchAll()获取所有行数据。$stmt = $pdo>query('SELECT * FROM users'); $row = $stmt>fetch(PDO::FETCH_ASSOC);,使用预处理语句可以绑定参数,提高安全性:$stmt = $pdo>prepare('SELECT * FROM users WHERE id = :id'); $stmt>execute(['id' => 1]);,这里id是命名占位符,也可以使用问号占位符。
对于事务处理,PDO提供了beginTransaction()、commit()和rollBack()方法。$pdo>beginTransaction(); try { $pdo>exec('UPDATE accounts SET balance = balance 100 WHERE id = 1'); $pdo>exec('UPDATE accounts SET balance = balance + 100 WHERE id = 2'); $pdo>commit(); } catch (Exception $e) { $pdo>rollBack(); },事务确保多个操作要么全部成功,要么全部回滚,保证数据一致性。

关闭连接时,PDO对象会在脚本结束时自动销毁,无需手动关闭,但为了释放资源,可以显式设置为null:$pdo = null;。
以下是一个简单的操作流程表格:

| 步骤 | 操作 | 示例代码 |
|---|---|---|
| 创建PDO对象 | 连接数据库 | $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass'); |
| 设置错误模式 | 启用异常 | $pdo>setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); |
| 执行查询 | 获取数据 | $stmt = $pdo>query('SELECT * FROM users'); |
| 处理结果 | 遍历输出 | while ($row = $stmt>fetch()) { echo $row['name']; } |
| 关闭连接 | 释放资源 | $pdo = null; |
注意事项:避免直接拼接SQL语句,防止SQL载入;使用预处理语句绑定参数;合理设置连接超时时间;定期备份数据库;使用索引优化查询性能。
相关问答FAQs:
Q1: 如何防止PHP中调用数据库时的SQL载入攻破?
A1: 使用预处理语句(PDO的prepare()和execute()方法)绑定参数,避免直接拼接用户输入到SQL语句中。$stmt = $pdo>prepare('SELECT * FROM users WHERE name = :name'); $stmt>execute(['name' => $userInput]);,对用户输入进行过滤和验证,如使用htmlspecialchars()转义特殊字符。
Q2: PHP中如何处理数据库连接失败的情况?
A2: 使用PDO的异常模式捕获连接错误。try { $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass'); } catch (PDOException $e) { die('连接失败: ' . $e>getMessage()); },在开发环境中,可以输出错误信息;在生产环境中,应记录错误日志并显示友好提示,避免暴露敏感信息。