PHP快速上手(十三)
PHP 预处理语句和读取数据
PHP 预处理语句
预处理语句是一种在执行 SQL 查询之前预先编译 SQL 查询并将参数绑定到查询中的占位符的方法。这可以防止 SQL 注入攻击,并提高查询的性能,特别是当多次执行相同的查询时。在 PHP 中,可以使用 MySQLi 或 PDO 来执行预处理语句。下面详细介绍如何在 PHP 中使用 MySQLi 和 PDO 中的预处理语句。
使用 MySQLi 中的预处理语句
1. 准备预处理语句
使用 prepare() 方法准备预处理语句,并在 SQL 查询中使用占位符 ? 或命名占位符 :name 来代替实际的参数。
$sql = "INSERT INTO users (name, email) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
2. 绑定参数
使用 bind_param() 方法将参数绑定到预处理语句中的占位符。
$name = "John Doe";
$email = "john@example.com";
$stmt->bind_param("ss", $name, $email);
在上面的示例中,“ss” 表示两个参数都是字符串类型。如果有更多参数,可以添加对应的类型标识符。
3. 执行预处理语句
通过调用 execute() 方法来执行预处理语句。
$stmt->execute();
使用 PDO 中的预处理语句
1. 准备预处理语句
使用 prepare() 方法准备预处理语句,并在 SQL 查询中使用占位符 ? 或命名占位符 :name 来代替实际的参数。
$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $conn->prepare($sql);
2. 绑定参数
可以使用 bindParam() 或 bindValue() 方法将参数绑定到预处理语句中的占位符。
$name = "John Doe";
$email = "john@example.com";
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$stmt->bindParam(':email', $email, PDO::PARAM_STR);
在上面的示例中,PDO::PARAM_STR 表示参数是字符串类型。如果有其他类型的参数,可以根据需要选择不同的参数类型。
3. 执行预处理语句
通过调用 execute() 方法来执行预处理语句。
$stmt->execute();
示例:插入多条数据
下面是一个示例,演示如何使用MySQLi 的预处理语句插入多条数据:
$sql = "INSERT INTO users (name, email) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
if ($stmt) {
$users = [
["John Doe", "john@example.com"],
["Jane Doe", "jane@example.com"],
["Alice Smith", "alice@example.com"]
];
foreach ($users as $user) {
$stmt->bind_param("ss", $user[0], $user[1]);
$stmt->execute();
}
echo "Records inserted successfully";
$stmt->close();
} else {
echo "Error preparing statement";
}
在上面的示例中,首先准备了一个插入语句的预处理语句,然后使用循环遍历要插入的数据,并将每个数据绑定到预处理语句中的占位符,最后执行预处理语句。
总结
预处理语句是一种在执行 SQL 查询之前预先编译 SQL 查询并将参数绑定到查询中的占位符的方法。在 PHP 中,可以使用 MySQLi 或 PDO 来执行预处理语句,这样可以防止 SQL 注入攻击,并提高查询的性能。
PHP 读取数据
当使用 MySQLi 和 PDO 读取数据时,你可以选择使用面向过程的编程风格(MySQLi 面向过程),或者面向对象的编程风格(MySQLi 面向对象和PDO)。以下是两种风格的示例以及它们的详细解释:
使用 MySQLi 面向过程读取数据
1. 连接到数据库
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
2. 执行查询并获取结果集
$sql = "SELECT id, name, email FROM users";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
}
} else {
echo "0 results";
}
- 关闭连接
mysqli_close($conn);
使用 MySQLi 面向对象读取数据
1. 连接到数据库
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
2. 执行查询并获取结果集
$sql = "SELECT id, name, email FROM users";
$result = $conn->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 results";
}
3. 关闭连接
$conn->close();
使用 PDO 读取数据
1. 连接到数据库
$dsn = "mysql:host=localhost;dbname=test";
$username = "root";
$password = "";
try {
$conn = new PDO($dsn, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
2. 执行查询并获取结果集
$sql = "SELECT id, name, email FROM users";
$stmt = $conn->query($sql);
if ($stmt->rowCount() > 0) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "id: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
}
} else {
echo "0 results";
}
3. 关闭连接文章来源:https://www.toymoban.com/news/detail-860358.html
Copy code
$conn = null;
总结
以上是使用 MySQLi 和 PDO 两种方式读取数据的示例。无论选择哪种方式,都需要先连接到数据库,然后执行查询并处理结果集,最后关闭连接。MySQLi 和 PDO 在功能上基本相似,但 PDO 更灵活,并支持更多种类的数据库,因此在选择时可以根据个人偏好和项目需求来决定。文章来源地址https://www.toymoban.com/news/detail-860358.html
到了这里,关于【PHP快速上手(十三)】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!