【PHP快速上手(十三)】

news/2024/10/18 12:32:15/
webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

目录

  • PHP快速上手(十三)
    • PHP 预处理语句和读取数据
      • PHP 预处理语句
        • 使用 MySQLi 中的预处理语句
        • 使用 PDO 中的预处理语句
        • 示例:插入多条数据
      • PHP 读取数据
        • 使用 MySQLi 面向过程读取数据
        • 使用 MySQLi 面向对象读取数据
        • 使用 PDO 读取数据

PHP快速上手(十三)

PHP 预处理语句和读取数据

PHP 预处理语句

预处理语句是一种在执行 SQL 查询之前预先编译 SQL 查询并将参数绑定到查询中的占位符的方法。这可以防止 SQL 注入攻击,并提高查询的性能,特别是当多次执行相同的查询时。在 PHP 中,可以使用 MySQLi 或 PDO 来执行预处理语句。下面详细介绍如何在 PHP 中使用 MySQLi 和 PDO 中的预处理语句。

使用 MySQLi 中的预处理语句

1. 准备预处理语句
使用 prepare() 方法准备预处理语句,并在 SQL 查询中使用占位符 ? 或命名占位符 :name 来代替实际的参数。

php">$sql = "INSERT INTO users (name, email) VALUES (?, ?)";
$stmt = $conn->prepare($sql);

2. 绑定参数
使用 bind_param() 方法将参数绑定到预处理语句中的占位符。

php">$name = "John Doe";
$email = "john@example.com";
$stmt->bind_param("ss", $name, $email);

在上面的示例中,“ss” 表示两个参数都是字符串类型。如果有更多参数,可以添加对应的类型标识符。

3. 执行预处理语句
通过调用 execute() 方法来执行预处理语句。

php">$stmt->execute();
使用 PDO 中的预处理语句

1. 准备预处理语句
使用 prepare() 方法准备预处理语句,并在 SQL 查询中使用占位符 ? 或命名占位符 :name 来代替实际的参数。

php">$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $conn->prepare($sql);

2. 绑定参数
可以使用 bindParam() 或 bindValue() 方法将参数绑定到预处理语句中的占位符。

php">$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() 方法来执行预处理语句。

php">$stmt->execute();
示例:插入多条数据

下面是一个示例,演示如何使用MySQLi 的预处理语句插入多条数据:

php">$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. 连接到数据库

php">$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";$conn = mysqli_connect($servername, $username, $password, $dbname);if (!$conn) {die("Connection failed: " . mysqli_connect_error());
}

2. 执行查询并获取结果集

php">$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";
}
  1. 关闭连接
php">mysqli_close($conn);
使用 MySQLi 面向对象读取数据

1. 连接到数据库

php">$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. 执行查询并获取结果集

php">$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. 关闭连接

php">$conn->close();
使用 PDO 读取数据

1. 连接到数据库

php">$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. 执行查询并获取结果集

php">$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. 关闭连接

php">Copy code
$conn = null;

总结
以上是使用 MySQLi 和 PDO 两种方式读取数据的示例。无论选择哪种方式,都需要先连接到数据库,然后执行查询并处理结果集,最后关闭连接。MySQLi 和 PDO 在功能上基本相似,但 PDO 更灵活,并支持更多种类的数据库,因此在选择时可以根据个人偏好和项目需求来决定。


http://www.ppmy.cn/news/1426508.html

相关文章

实习学习内容-Lua语法

Lua是一种轻量级的脚本语言&#xff0c;以其简单、灵活和高效的特点被广泛应用于嵌入式系统、游戏开发和服务器端编程中。Lua语言的设计目标是为了嵌入应用程序中&#xff0c;提供灵活的扩展和定制功能。下面&#xff0c;我将简要介绍Lua的基本语法和特点。 基本语法 变量和类…

多头蜗杆的轴截面和端截面的关系

最近有一个点,之前没有注意,就是多头蜗杆的导程与齿距的关系,它们会影响蜗杆断截面的形状,是不是听的有点别扭,往下看: 上图是一个蜗杆的轴剖面齿形,看到这个图形,如果看不到蜗杆实物或者有明显的标准,我们是没办法判断这个蜗杆的头数是多少。 从下面几张图可以看到,…

OWASP发布10大开源软件风险清单

3月20日&#xff0c;xz-utils 项目被爆植入后门震惊了整个开源社区&#xff0c;2021 年 Apache Log4j 漏洞事件依旧历历在目。倘若该后门未被及时发现&#xff0c;那么将很有可能成为影响最大的软件供应链漏洞之一。近几年爆发的一系列供应链漏洞和风险&#xff0c;使得“加强开…

Postgres数据库中的死锁是如何产生的,如何避免和解决?

文章目录 死锁的产生原因如何避免死锁如何解决死锁示例代码查询死锁信息终止事务 在Postgres数据库中&#xff0c;死锁是一种特殊的情况&#xff0c;其中两个或多个事务相互等待对方释放资源&#xff0c;从而导致它们都无法继续执行。这种情况通常发生在多个事务尝试以不同的顺…

Liunx挂载硬件设备

一、mount命令&#xff08;用于挂载文件系统&#xff09; &#xff08;一&#xff09;语法格式&#xff1a;mount 参数 源设备路径 目的路径 &#xff08;二&#xff09;参数 1、-t&#xff1a;指定挂载的文件系统 &#xff08;1&#xff09;iso9660&#xff1a;光盘或光盘…

阿赵UE学习笔记——28、粒子系统Niagara简介

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的使用。这次开始学习粒子系统的使用。 一、Cascade系统 在介绍UE5的Niagara系统之前&#xff0c;必须先介绍一下旧版本的粒子系统。   在UE4的时候&#xff0c;虚幻引擎的粒子系统叫做Cascade&#x…

Unity Editor编辑器扩展之创建脚本

前言 既然你看到这篇文章了&#xff0c;你是否也有需要使用代码创建脚本的需求&#xff1f;使用编辑器扩展工具根据不同的表格或者新增的内容去创建你想要的脚本。如果不使用工具&#xff0c;那么你只能不断去修改某个脚本&#xff0c;这项工作既繁琐也浪费时间。这个时候作为程…

jtop安装

一、安装依赖环境 sudo apt-get install git cmake sudo apt-get install python3-dev sudo apt-get install libhdf5-serial-dev hdf5-tools sudo apt-get install libatlas-base-dev gfortran二、pip3安装 sudo apt-get update sudo apt-get upgrade sudo apt-get install …