PHP 使用 PDO 连接数据库并使用预处理方式遍历数据
PDO 复习
- POD 为访问数据库建立了统一的接口 即不管使用哪种数据库 都可以用相同的方法来查询获取数据
- PDO 的使用步骤有:
- 1.定义一个 PDO 的数据源名 包括主机名端口号和数据库名称
define('DB_DSN', "mysql:host=localhost;dbname=db_users;charset=utf8");
$dsn = 'mysql:host=localhost;dbname=db_users;charset=utf8';
- 2.实例化一个 PDO 对象 并连接数据库
$pdo = new PDO(DB_DSN, 'root', 'root');
- 3.使用 SQL 语句、PDO 的方法对数据库进行基本操作
- SQL 数据表增查改删
- 往数据表中某些项目插入某些值
"INSERT INTO 数据表名(项目名) VALUES(值)";
- 根据指定条件从数据表中查找某些值
"SELECT 查找列表 FROM 数据表名 WHERE 条件";
- 根据指定条件从数据表中修改某些值
"UPDATE 数据表名 项目名=值,... WHERE 条件";
- 根据指定条件从数据表中删除某些值
"DELETE FROM 数据表名 WHRER 条件";
- POD 方法
- 执行 SQL 语句:
exec()
:返回执行 SQL 语句后受影响的行数 通常用于UPDATE
、INSERT
、DETLETE
语句中query()
:返回执行 SQL 查询语句后的结果集 pdostament 对象prepare()
:预处理语句 准备要执行的 SQL 语句 返回语句对象execute()
:预处理语句 执行经过prepare()
预处理后的语句
- 获取结果集
fetch()
:获取结果集中的第一行记录fetchAll()
:获取结果集中的所有记录
- 控制返回记录的可选方式有
PDO::FETCH_ASSOC
、PDO::FETCH_NUM
、PDO::FETCH_BOTH
等
- 错误处理
errorCode()
:执行 SQL 语句时发生的错误代码errorInfo()
:执行 SQL 语句时发生的错误信息
- 参数绑定:在执行 PDO 预处理时可以使用参数绑定
bindParam()
:将变量绑定给参数bindValue()
:将值绑定给参数
作业
- 使用 pdo 类的对象去连接数据库,然后使用 PDO 对象中的 prepare()方法获取 PDOStatement 对象, 接着使用 PDOStatement 对象的成员方法将获得的结果集中的数据(二维数组)遍历出来,渲染到表格中。
<?php
//定义PDO的数据源名称 包含主机名称、端口号、数据库名称、客户端字符集等
define('DB_DSN', "mysql:host=localhost;dbname=db_users;charset=utf8");
try{//捕获异常
//实例化对象
$pdo = new PDO(DB_DSN, 'root', 'root');
}catch(PDOException $e){
echo $e->getMessage();
}catch(Throwable $e){
echo $e->getMessage();
}
//定义SQL语句 在`tb_member`中查询年龄大于一定值的数据
$sql = "SELECT * FROM `tb_member` WHERE `age`>?";
//预处理SQL语句 防止SQL注入
$stmt = $pdo->prepare($sql);
//参数绑定 从POST表单中获取用户输入的最小年龄
$stmt->bindParam(1,$_POST['age']);
//执行预处理语句
$stmt->execute();
//以关联数组方式获取所有查询到的信息
$arr = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="en">
<body style="text-align:center;">
<form action="" method="post">
<input type="number" name="age" placeholder="请输入最小年龄">
<input type="submit" >
</form>
<hr>
<?php if(!empty($arr)){ ?>
<h4>用户信息</h4>
<table align='center' border='1' cellspacing='0'>
<thead>
<tr>
<th>ID</th>
<th>用户名</th>
<th>年龄</th>
<th>注册时间</th>
</tr>
</thead>
<tbody>
<?php foreach($arr as $val){ ?>
<tr>
<td><?php echo $val['id']; ?></td>
<td><?php echo $val['username']; ?></td>
<td><?php echo $val['age']; ?></td>
<td><?php echo $val['createtime']; ?></td>
</tr>
<?php } ?>
</tbody>
</table>
<?php }?>
</body>
</html>