预处理语句及绑定参数
使用预处理语句和绑定参数可以增加代码的安全性和性能。下面是使用MySQLi和PDO进行预处理语句和参数绑定的示例:
使用MySQLi进行预处理语句和绑定参数:
<?php
// 数据库连接参数
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
// 创建数据库连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接是否成功
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 准备预处理语句
$stmt = $conn->prepare("INSERT INTO mytable (firstname, lastname, email) VALUES (?, ?, ?)");
// 绑定参数
$stmt->bind_param("sss", $firstname, $lastname, $email);
// 设置参数值
$firstname = "John";
$lastname = "Doe";
$email = "johndoe@example.com";
// 执行预处理语句
if ($stmt->execute()) {
echo "数据插入成功";
} else {
echo "数据插入失败: " . $stmt->error;
}
// 关闭预处理语句和数据库连接
$stmt->close();
$conn->close();
?>
使用PDO进行预处理语句和绑定参数:
<?php
// 数据库连接参数
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
try {
// 创建数据库连接
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// 设置PDO错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 准备预处理语句
$stmt = $conn->prepare("INSERT INTO mytable (firstname, lastname, email) VALUES (?, ?, ?)");
// 绑定参数
$stmt->bindParam(1, $firstname);
$stmt->bindParam(2, $lastname);
$stmt->bindParam(3, $email);
// 设置参数值
$firstname = "John";
$lastname = "Doe";
$email = "johndoe@example.com";
// 执行预处理语句
if ($stmt->execute()) {
echo "数据插入成功";
} else {
echo "数据插入失败";
}
// 关闭预处理语句和数据库连接
$stmt = null;
$conn = null;
} catch(PDOException $e) {
echo "数据库连接失败: " . $e->getMessage();
}
?>
在上述示例中,我们首先准备了一个带有占位符的预处理语句,然后使用bind_param
(MySQLi)或bindParam
(PDO)方法绑定参数。在执行预处理语句之前,我们设置了参数的值。这样可以防止SQL注入攻击,并提高执行效率。
请注意,在绑定参数时,我们使用bind_param
(MySQLi)或bindParam
(PDO)方法来指定参数的数据类型。在MySQLi中,参数类型字符串由字母组成,每个字母代表一个参数的数据类型。在PDO中,我们使用参数的位置索引(从1开始)来绑定参数。
最后,我们执行预处理语句并根据执行结果输出相应的消息。在完成插入操作后,记得关闭预处理语句和数据库连接。
预处理语句和参数绑定可以确保输入数据的安全性,并提高数据库操作的性能。
MySQLi 预处理语句
MySQLi(MySQL improved extension)是PHP中用于与MySQL数据库进行交互的扩展。下面是使用MySQLi进行预处理语句的示例:
<?php
// 数据库连接参数
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
// 创建数据库连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接是否成功
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 准备预处理语句
$stmt = $conn->prepare("SELECT * FROM mytable WHERE age > ?");
// 绑定参数
$stmt->bind_param("i", $age);
// 设置参数值
$age = 25;
// 执行预处理语句
$stmt->execute();
// 获取结果集
$result = $stmt->get_result();
// 输出结果
while ($row = $result->fetch_assoc()) {
echo "姓名:" . $row["name"] . ", 年龄:" . $row["age"] . "<br>";
}
// 关闭预处理语句和数据库连接
$stmt->close();
$conn->close();
?>
在上述示例中,我们首先创建了一个数据库连接,并检查连接是否成功。然后,我们准备了一个带有占位符的预处理语句,其中?
表示待填充的参数。在这个例子中,我们使用了一个参数age
,用于筛选年龄大于给定值的记录。
接下来,我们使用bind_param
方法绑定参数。在此方法中,第一个参数是一个字符串,指定参数的数据类型。在这个例子中,我们使用了i
,表示参数是一个整数。第二个参数是要绑定的变量,即我们之后要设置的参数的值。
然后,我们设置了参数的值。在这个例子中,我们将age
设置为25。
接下来,我们执行预处理语句,并使用get_result
方法获取结果集。然后,我们使用fetch_assoc
方法从结果集中获取每一行的数据,并输出到页面上。
最后,我们关闭了预处理语句和数据库连接。
使用MySQLi的预处理语句可以确保数据的安全性,并提高执行效率。
PDO 中的预处理语句
在PHP中,PDO(PHP Data Objects)是另一种与数据库交互的扩展。下面是使用PDO进行预处理语句的示例:
<?php
// 数据库连接参数
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
// 创建数据库连接
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// 设置错误处理模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 准备预处理语句
$stmt = $conn->prepare("SELECT * FROM mytable WHERE age > :age");
// 绑定参数
$stmt->bindParam(":age", $age);
// 设置参数值
$age = 25;
// 执行预处理语句
$stmt->execute();
// 获取结果集
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 输出结果
foreach ($result as $row) {
echo "姓名:" . $row["name"] . ", 年龄:" . $row["age"] . "<br>";
}
// 关闭数据库连接
$conn = null;
?>
在上述示例中,我们首先创建了一个PDO对象,用于与数据库建立连接。在连接字符串中,我们指定了数据库的主机名、用户名、密码和数据库名。
然后,我们将错误处理模式设置为异常模式,以便在发生错误时抛出异常。
接下来,我们准备了一个带有命名占位符的预处理语句,其中:age
表示待填充的参数。在这个例子中,我们使用了一个参数:age
,用于筛选年龄大于给定值的记录。
然后,我们使用bindParam
方法绑定参数。在这个方法中,第一个参数是参数的名称,即预处理语句中的占位符。第二个参数是要绑定的变量,即我们之后要设置的参数的值。
接下来,我们设置了参数的值。在这个例子中,我们将:age
设置为25。
然后,我们执行预处理语句,并使用fetchAll
方法获取结果集。该方法返回一个包含所有行的关联数组。
最后,我们使用foreach
循环遍历结果集,并将每一行的数据输出到页面上。
最后,我们关闭了数据库连接。
使用PDO的预处理语句可以确保数据的安全性,并提供更多的数据库驱动选项。