php
<?php
// 数据库配置
$host = 'localhost';
$username = 'your_username';
$password = 'your_password';
$database = 'your_database';
// 创建数据库连接
$conn = new mysqli($host, $username, $password, $database);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 1. 查询数据(SELECT)
$email = "test@example.com";
$stmt = $conn->prepare("SELECT id, name, email FROM users WHERE email = ?");
$stmt->bind_param("s", $email); // "s" 表示字符串类型
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"] . ", 姓名: " . $row["name"] . ", 邮箱: " . $row["email"] . "<br>";
}
} else {
echo "未找到匹配记录";
}
$stmt->close();
// 2. 插入数据(INSERT)
$name = "张三";
$email = "zhangsan@example.com";
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email); // 两个 "s" 分别对应两个字符串参数
if ($stmt->execute()) {
echo "新记录插入ID: " . $stmt->insert_id . "<br>";
} else {
echo "错误: " . $stmt->error . "<br>";
}
$stmt->close();
// 3. 更新数据(UPDATE)
$newName = "李四";
$id = 1;
$stmt = $conn->prepare("UPDATE users SET name = ? WHERE id = ?");
$stmt->bind_param("si", $newName, $id); // "s" 字符串,"i" 整数
if ($stmt->execute()) {
echo "更新成功,影响行数: " . $stmt->affected_rows . "<br>";
} else {
echo "错误: " . $stmt->error . "<br>";
}
$stmt->close();
// 4. 删除数据(DELETE)
$id = 2;
$stmt = $conn->prepare("DELETE FROM users WHERE id = ?");
$stmt->bind_param("i", $id); // "i" 表示整数类型
if ($stmt->execute()) {
echo "删除成功,影响行数: " . $stmt->affected_rows . "<br>";
} else {
echo "错误: " . $stmt->error . "<br>";
}
$stmt->close();
// 关闭数据库连接
$conn->close();
?>
预处理语句的优势:
1. **防止SQL注入**:通过参数化查询,自动处理特殊字符转义
2. **性能优化**:查询语句只编译一次,多次执行时更快
3. **代码安全**:分离SQL逻辑和用户输入,降低安全风险
参数类型说明:
- `i` - 整数(integer)
- `d` - 双精度浮点数(double)
- `s` - 字符串(string)
- `b` - 二进制数据(blob)
使用建议:
1. 在实际项目中,建议:
- 将数据库配置信息存储在独立配置文件中
- 添加更完善的错误处理机制
- 使用try-catch块处理异常(需要启用mysqli的异常模式)
- 对敏感数据进行加密存储
- 定期备份数据库
2. 启用mysqli异常模式示例:
php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$conn = new mysqli($host, $username, $password, $database);
// 数据库操作
} catch (mysqli_sql_exception $e) {
die("数据库错误: " . $e->getMessage());
}