PHP数据库连接基础
PHP与数据库交互的核心是建立连接,常用的数据库扩展包括MySQLi和PDO,MySQLi专为MySQL设计,支持面向过程和面向对象两种方式;PDO则支持多种数据库,具有更好的跨平台性,以MySQLi面向对象为例,连接代码如下:

$host = "localhost";
$user = "root";
$pass = "";
$db = "test_db";
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
} 连接时需注意错误处理,避免直接暴露敏感信息,PDO连接方式类似,但需指定数据库类型(如mysql:host=localhost;dbname=test_db)。
执行SQL查询语句
查询数据是数据库操作的基础,使用MySQLi的query()方法执行SELECT语句,并通过fetch_assoc()获取结果:
$sql = "SELECT id, name FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " Name: " . $row["name"]. "<br>";
}
} else {
echo "0 结果";
} 对于PDO,需使用prepare()和execute()预处理语句,防止SQL注入:
$stmt = $conn->prepare("SELECT id, name FROM users WHERE id = :id");
$stmt->bindParam(':id', $id);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 插入、更新与删除数据
插入数据时,使用INSERT INTO语句,MySQLi示例:

$sql = "INSERT INTO users (name, email) VALUES ('John', 'john@example.com')";
if ($conn->query($sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
} 更新数据通过UPDATE实现,删除数据使用DELETE,务必添加WHERE条件,避免误操作,PDO推荐使用预处理语句处理动态数据:
$stmt = $conn->prepare("UPDATE users SET email = :email WHERE id = :id");
$stmt->execute(['email' => 'new@example.com', 'id' => 1]); 事务处理与错误管理
事务确保数据一致性,MySQLi中通过begin_transaction()、commit()和rollback()实现:
$conn->begin_transaction();
try {
$conn->query("INSERT INTO accounts (name, balance) VALUES ('Alice', 1000)");
$conn->query("INSERT INTO transactions (user_id, amount) VALUES (1, -100)");
$conn->commit();
} catch (Exception $e) {
$conn->rollback();
echo "事务失败: " . $e->getMessage();
} PDO需设置PDO::ATTR_ERRMODE为PDO::ERRMODE_EXCEPTION以启用异常处理。
数据库连接关闭与优化
操作完成后关闭连接:$conn->close()(MySQLi)或$conn = null(PDO),优化方面,建议使用连接池(如PDO的持久化连接)、限制查询结果数量(LIMIT子句)以及定期索引优化。

相关问答FAQs
Q1: 如何防止SQL注入攻击?
A1: 使用预处理语句(PDO或MySQLi的prepare()方法)过滤用户输入,避免直接拼接SQL字符串。$stmt->bindParam(':id', $id)确保变量被安全转义。
Q2: 何时使用MySQLi,何时选择PDO?
A2: 若项目仅使用MySQL,MySQLi性能更优;若需支持多种数据库(如PostgreSQL、SQLite),PDO是更好的选择,因其提供统一的API接口。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/185746.html
