在PHP中,使用mysqli扩展的prepare语句是一种预防SQL注入攻击的有效方式。它允许你编写带有参数占位符的SQL语句,然后在执行前绑定具体的值给这些占位符。以下是PHP5中使用mysqli的prepare语句的基本步骤和示例:
### 步骤
1. **连接数据库**:首先,你需要使用mysqli_connect()或mysqli的构造函数来创建数据库连接。
2. **准备SQL语句**:使用`prepare()`方法准备你的SQL语句。在SQL语句中,使用`?`作为参数占位符。
3. **绑定参数**:通过`bind_param()`方法,将变量绑定到SQL语句中的占位符上。注意参数类型(如`s`代表字符串,`i`代表整数等)。
4. **执行语句**:使用`execute()`方法执行准备好的语句。
5. **处理结果**:如果SQL语句是SELECT或类似的查询语句,你需要使用`get_result()`(PHP 5.3.0以上版本且需要mysqli的nd_mysqli扩展)或`bind_result()`方法来处理结果。
6. **关闭语句和连接**:使用`close()`方法关闭语句和连接(尽管在脚本结束时它们通常会自动关闭)。
### 示例
以下是一个简单的示例,演示了如何使用mysqli的prepare语句来插入一条记录到数据库中:
<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_dbname";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 准备SQL语句
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
// 绑定参数
$stmt->bind_param("sss", $firstname, $lastname, $email);
// 设置参数并执行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
echo "新记录插入成功";
// 关闭语句
$stmt->close();
// 关闭连接
$conn->close();
?>
请注意,根据你的PHP版本和配置,你可能需要使用`mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);`来确保错误被抛出为异常,而不是简单地报告错误。此外,`get_result()`方法在某些PHP版本和配置下可能不可用,这时你可以使用`bind_result()`和`fetch()`方法来获取结果集。