预处理语句对于防止 MySQL 注入是非常有用的。
预处理语句及绑定参数
预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。
预处理语句的工作原理如下:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
connect_error) {die("连接失败: " . $conn->connect_error);
}// 预处理及绑定
$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();$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();echo "新记录插入成功";$stmt->close();
$conn->close();
?>
解析以下实例的每行代码:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
在 SQL 语句中,我们使用了问号 (?),在此我们可以将问号替换为整型,字符串,双精度浮点型和布尔值。
接下来,让我们来看下 bind_param() 函数:
$stmt->bind_param("sss", $firstname, $lastname, $email);
参数有以下四种类型:
i - integer(整型)
d - double(双精度浮点型)
s - string(字符串)
b - BLOB(binary large object:二进制大对象)