今天主要学习了数据库基本知识、PDO对象、预处理对象与数据绑定。
一、数据库基本知识
动态网站最大的特征就是从数据库动态获取数据,随着数据库的发展,我们现在用MYSQL这种关系型数据库,所谓“关系”,简单来说就是一张表,近似的就是一个二维数据。
数据库的结构。数据库由多张表格组成,单个数据表有多行记录组成,就绪表格的行,每条记录由多个字段组成,就像表格的列。
最常用的数据库操作是“curd”操作,即增删改查。
常用的sql命令
二、PDO对象
PDO对象就是PHP数据对象,他可以支持操作所有的数据库,这样就省去了写多种语言对应的sql语句的烦恼。
PDO连接数据库就是一个创建PDO对象的过程,他需要几个参数:
数据源,数据库的用户名、密码。连接数据代码如下:
<?php
// pdo操作
// 创建pdo连接 先设置连接参数
// 数据源
$dsn = 'mysql:host=127.0.0.1;dbname=php';
// 用户名
$user = 'root';
// 密码
$password = 'root';
// 创建pdo对象 连接数据库
// try catch 可以捕获到连接过程中的错误
try {
$pdo = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
exit('Conection Faild:' . $e->getMessage());
}
// 测试
var_dump($pdo); //返回pdo对象
echo '<br>';
// 查询测试
$sql = 'SELECT `name`, `position` FROM `staff`';
foreach ($pdo->query($sql) as $row) {
echo $row['name'] . '=>' . $row['position'] . '<br>';
}
// 关闭连接
$pdo = null;
var_dump($pdo);点击 "运行实例" 按钮查看在线实例
三、预处理对象
预处理的过程实际上就是对sql语句模板进行编译检查,缓存,提升运行效率,可以用占位符先建立sql模板,然后通过参数绑定进行数据处理。代码如下:
<?php
// 预处理对象
// 建立连接
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root');
// 设置查询sql语句
$sql = 'SELECT * FROM `staff` WHERE `age` > 40 AND `sex` = 1';
// 获取准备对象
$stmt = $pdo->prepare($sql);
// 查看预处理对象
var_dump($stmt);
echo '<hr>';
// 查看生成sql的语句模板字符串
echo $stmt->queryString;
// 关闭连接
$pdo = null;点击 "运行实例" 按钮查看在线实例
四、参数绑定
bindvalue 是通过变量的赋值操作 bindp'aram变量引用 可以动态的进行参数绑定
代码如下:
<?php
// 数据绑定的原理与应用场景
// 建立连接
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root');
// sql语句模板 :id是占位符 通过后期数据绑定来设值
$sql = 'SELECT `id`,`name`,`position` FROM `staff` WHERE `id` = :id';
// 准备对象
$stmt = $pdo->prepare($sql);
// 参数绑定 有两种方法可用
// bindValue 将一个变量的值绑定到参数上 可以绑定字面量 也可以绑定变量 是简单的值传递
$id = 1;
$stmt->bindValue('id', $id, PDO::PARAM_INT);
$stmt->bindParam('id', $id, PDO::PARAM_INT);
// 执行sql操作
$stmt->execute();
// 获取记录
// fetch() 从结果集中获取一条记录 指针下移
// PDO::FETCH_ASSOC 参数设置后就可以只获取关联数组
$result = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($result);
echo '<hr>';
// 获取id为2 的记录
// 想要动态设置参数 只能用bindParam 他是传递引用
$id = 2;
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($result);
// 关闭连接
$pdo = null;点击 "运行实例" 按钮查看在线实例
五、查询操作
fetch适合单条操作
<?php
// 连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root');
// sql语句
$sql = 'SELECT `id`,`name`,`position` FROM `staff` WHERE `id` BETWEEN :start AND :stop';
// 获取准备对象
$stmt = $pdo->prepare($sql);
// 数据绑定
$start = 2;
$stop = 4;
$stmt->bindParam('start', $start, PDO::PARAM_INT);
$stmt->bindParam('stop', $stop, PDO::PARAM_INT);
// 执行sql语句
$stmt->execute();
// 获取结果集 遍历打印他
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo '<pre>', print_r($row,true);
}
// 关闭连接
$pdo = null;点击 "运行实例" 按钮查看在线实例
fetchAll适合获取结果列表
<?php
// 连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root');
// sql语句
$sql = 'SELECT `id`,`name`,`position` FROM `staff` WHERE `id` BETWEEN :start AND :stop';
// 获取准备对象
$stmt = $pdo->prepare($sql);
// 数据绑定 直接给execut传值
// 执行sql语句
$stmt->execute(['start'=>2, 'stop'=>4]);
// fetchAll获取结果集 遍历打印他
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
echo '<pre>', print_r($row, true);
}
// 关闭连接
$pdo = null;点击 "运行实例" 按钮查看在线实例
bindColumn()
<?php
// 连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root');
// sql语句
$sql = 'SELECT `id`,`name`,`position` FROM `staff` WHERE `id` BETWEEN :start AND :stop';
// 获取准备对象
$stmt = $pdo->prepare($sql);
// 数据绑定 直接给execut传值
// 执行sql语句
$stmt->execute(['start'=>2, 'stop'=>4]);
// bindCloum将结果集中的列绑定给指定的变量
$stmt->bindColumn('id', $id, PDO::PARAM_INT);
$stmt->bindColumn('name', $name, PDO::PARAM_STR);
$stmt->bindColumn('position', $position, PDO::PARAM_STR);
//POD::FETCH_BOUND配合bindColumn 将结果集中列绑定给指定变量
while ($stmt->fetch(PDO::FETCH_BOUND)){
echo 'id:', $id, 'name:', $name, 'position', $position, '<br>';
}
// 关闭连接
$pdo = null;点击 "运行实例" 按钮查看在线实例
总结:
1、数据库是php中的重中之重,他让让php数据交互,实现动态获取数据。
2、数据库的操作就是增删改查。
3、PDO可以实现操作多种数据库,实例化PDO对象实现数据连接,注意host默认参数可以连接,但为了效率还是要加上127.0.0.1;
4、预处理对象可以先建立模板,防止反复访问数据库,提前进行处理
5、通过在sql语句中设置占位符然后通过参数绑定来实现数据查询获取,bindParam能动态绑定
6、查询数据fetch fetchAll bindColumn都有各自的应用场景,bindColumn 与fetch(PDO::FETCH_BOUND)成对出现。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号