在PHP中,mysqli
(MySQL Improved Extension)是操作MySQL数据库的扩展库,提供了面向对象和过程式两种风格。以下是mysqli
的基本操作方法:
1. 连接数据库
面向对象风格
$mysqli = new mysqli('localhost', 'username', 'password', 'database_name');// 检查连接是否成功
if ($mysqli->connect_error) {die("连接失败: " . $mysqli->connect_error);
}echo "连接成功";
过程式风格
$conn = mysqli_connect('localhost', 'username', 'password', 'database_name');if (!$conn) {die("连接失败: " . mysqli_connect_error());
}echo "连接成功";
2. 执行查询(SELECT)
// 准备SQL语句
$sql = "SELECT id, name, email FROM users";
$result = $mysqli->query($sql);// 检查查询结果
if ($result->num_rows > 0) {// 输出数据while ($row = $result->fetch_assoc()) {echo "ID: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";}
} else {echo "0 结果";
}// 释放结果集
$result->free();
3. 预处理语句(防止SQL注入)
// 准备SQL语句
$sql = "SELECT id, name, email FROM users WHERE age > ?";
$stmt = $mysqli->prepare($sql);// 绑定参数
$age = 18;
$stmt->bind_param("i", $age); // "i" 表示整数类型// 执行查询
$stmt->execute();// 获取结果
$result = $stmt->get_result();// 处理结果
while ($row = $result->fetch_assoc()) {echo "ID: " . $row["id"] . " - Name: " . $row["name"] . "<br>";
}// 关闭预处理语句
$stmt->close();
4. 插入数据
// 准备SQL语句
$sql = "INSERT INTO users (name, email, age) VALUES (?, ?, ?)";
$stmt = $mysqli->prepare($sql);// 绑定参数
$name = "John Doe";
$email = "john@example.com";
$age = 30;
$stmt->bind_param("ssi", $name, $email, $age); // "ssi" 表示两个字符串和一个整数// 执行插入
if ($stmt->execute()) {echo "新记录插入成功,ID: " . $stmt->insert_id;
} else {echo "Error: " . $stmt->error;
}// 关闭预处理语句
$stmt->close();
5. 更新数据
// 准备SQL语句
$sql = "UPDATE users SET age = ? WHERE id = ?";
$stmt = $mysqli->prepare($sql);// 绑定参数
$newAge = 31;
$id = 1;
$stmt->bind_param("ii", $newAge, $id);// 执行更新
if ($stmt->execute()) {echo "记录更新成功,受影响的行数: " . $stmt->affected_rows;
} else {echo "Error: " . $stmt->error;
}// 关闭预处理语句
$stmt->close();
6. 删除数据
// 准备SQL语句
$sql = "DELETE FROM users WHERE id = ?";
$stmt = $mysqli->prepare($sql);// 绑定参数
$id = 1;
$stmt->bind_param("i", $id);// 执行删除
if ($stmt->execute()) {echo "记录删除成功,受影响的行数: " . $stmt->affected_rows;
} else {echo "Error: " . $stmt->error;
}// 关闭预处理语句
$stmt->close();
7. 事务处理
// 开始事务
$mysqli->begin_transaction();try {// 执行多个SQL操作$mysqli->query("UPDATE accounts SET balance = balance - 100 WHERE id = 1");$mysqli->query("UPDATE accounts SET balance = balance + 100 WHERE id = 2");// 提交事务$mysqli->commit();echo "事务执行成功";
} catch (Exception $e) {// 回滚事务$mysqli->rollback();echo "事务失败: " . $e->getMessage();
}
8. 关闭连接
$mysqli->close();
mysqli与PDO的对比
特性 | mysqli | PDO |
---|---|---|
数据库支持 | 仅MySQL | 支持多种数据库(MySQL、PostgreSQL等) |
面向对象 | 支持(也支持过程式) | 仅面向对象 |
预处理语句 | 支持 | 支持 |
错误处理 | 支持异常模式 | 支持异常模式 |
事务处理 | 支持 | 支持 |
跨数据库兼容性 | 无 | 高 |
总结
mysqli
是专门为MySQL设计的扩展,性能略高。- 预处理语句是防止SQL注入的关键,强烈推荐使用。
- 事务处理可确保数据的一致性。
- 对于跨数据库项目,建议使用PDO。
以上示例展示了mysqli
的基本用法,实际开发中建议结合异常处理和预处理语句,提高代码的安全性和可维护性。