我是靠谱客的博主 犹豫果汁,最近开发中收集的这篇文章主要介绍【PHP7 面向对象 笔记整理二】数据库抽象层PDO使用及实战一、数据库抽象层(PDO)二、PDO项目实战,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
文章目录
- 一、数据库抽象层(PDO)
- 1) PDO 链接数据库
- 2) PDO 调用方法
- 3) PDO 对象
- 4) PDOStatement 对象
- 二、PDO项目实战
- 1)准备工作:
- ① 新建一个 index.php 文件
- ② 在 index.php 文件中,写入简单的页面样式
- ③ 用户表 user(以下是我测试导出的数据表,可以直接放到命令行执行,也可以创建一个后缀名为.sql的文件,然后导入)
- 2) 查询操作
- ① 查询所有用户的数据,此时要使用PDO进行数据库操作分为以下四步:
- ② 将查询到的数据遍历到页面
- ③ 完整代码及运行结果:
- 3)删除操作
- ① 准备 删除按钮 和 跳转链接,及跳转的页面(此处为了效果明显使用跳转页面),代码如下:
- ② 新建 del.php 文件
一、数据库抽象层(PDO)
1) PDO 链接数据库
// DSN: 数据库类型:dbname=库名;host=主机名/IP地址;charset=编码
// USER: 用户名
// PWD: 密码
实例1:PDO链接数据库
$dsn = 'mysql:dbname=s73;host=localhost;charset=utf8';
$user = 'root';
$pwd = '123456';
$pdo = new PDO($dsn, $user, $pwd); // 此处的变量名可以变,$a, $b, $c也可以使用
var_dump($pdo);
在本地创建一个数据库,如下:
数据库名:s73
用户名:root
密码:123456
运行结果:
若没有在本地建立数据库,会报以下错误:
2) PDO 调用方法
$对象名->方法名()
实例2:query方法,获取一条数据
// 1. PDO连接数据库
$dsn = 'mysql:dbname=s73;host=localhost;charset=utf8';
$user = 'root';
$pwd = '123456';
// 2. 实例化PDO类
$pdo = new PDO($dsn, $user, $pwd);
// 3. 准备SQL语句
$sql = 'SELECT * FROM `user`';
// 4. 执行SQL语句,通过PDO里面的query()方法,成功:返回PDOStatement对象
echo "<pre>";
$res = $pdo->query($sql);
var_dump($res);
// 5. 分析结果集
// fetch(): 获取一条结果集
$data = $res->fetch();
var_dump($data);
运行结果:
实例3:获取查询到的所有数据(关联,索引,默认)
① 获取查询到的所有数据,混合(默认)
// 1. 链接数据库
$dsn = 'mysql:dbname=s73;host=localhost;charset=utf8';
$user = 'root';
$pwd = '123456';
// 2. 实例化PDO
$pdo = new PDO($dsn, $user, $pwd);
// 3. 准备SQL语句
$sql = 'SELECT * FROM `user`';
// 4. 执行SQL语句,通过PDO里面的query()方法,成功:返回PDOStatement对象
$res = $pdo->query($sql);
// 5. 分析结果集
// 获取查询到的所有数据,混合(默认)
echo "<pre>";
$data = $res->fetchALL(); // 或者 $data = $res->fetchALL(PDO::FETCH_BOTH); 【二者等价】
var_dump($data);
运行结果:获取查询到的所有结果集
② 获取查询到的所有数据,关联【常用】
// 获取查询到的所有数据,关联
$data = $res->fetchALL(PDO::FETCH_ASSOC);
运行结果:获取查询到的所有数据,关联
③ 获取查询到的所有数据,索引
$data = $res->fetchALL(PDO::FETCH_NUM);
运行结果:获取查询都得所有数据,索引
3) PDO 对象
query();
// 返回值:PDOStatement对象【最适用于查】(适用于任何)
exec();
// 返回值:受影响的行数【适用于增、删、改】
errorInfo(); // 返回值:错误信息
0 -> 驱动号
00000:成功,其他都为失败
1 -> 错误编号
2 -> 错误详情
lastInsertId(); // 返回值:返回最后一次插入的ID
实例4:exec()方法的使用【删除操作】
// 1. 链接数据库
$dsn = 'mysql:dbname=s73;host=localhost;charset=utf8';
$user = 'root';
$pwd = '123456';
// 2. 实例化PDO
$pdo = new PDO($dsn, $user, $pwd);
// 3. 准备SQL语句
$sql = 'DELETE FROM `user` WHERE `id`=2';
// 4. 执行SQL语句
$res = $pdo->exec($sql);
var_dump($res);
运行结果:
未执行删除前的数据表
执行删除后的数据表
实例5:errorInfo()返回错误信息
// 1. 链接数据库
$dsn = "mysql:dbname=s73;host=localhost;charset=utf8";
$user = 'root';
$pwd = '123456';
// 2. 实例化PDO
$pdo = new PDO($dsn, $user, $pwd);
// 3. 准备SQL语句
$sql = 'DEL FROM `user` WHERE `id`=4'; // 该条SQL语句是一条有语法错误的SQL,为了返回错误信息而使用
// 4. 执行SQL语句
$res = $pdo->exec($sql);
echo "<pre>";
var_dump($res);
var_dump($pdo->errorInfo());
运行结果:有错误信息的结果
若将SQL语句改为:
$sql = 'DELETE FROM `user` WHERE `id`=4';
运行结果:此时无错误信息(5个0代表执行成功)
实例6:lastInsetId()返回最后一次插入的ID
// 1. 链接数据库
$dsn = "mysql:dbname=s73;host=localhost;charset=utf8";
$user = "root";
$pwd = "123456";
// 2. 实例化PDO
$pdo = new PDO($dsn, $user, $pwd);
// 3. 准备SQL语句
$sql = 'INSERT INTO `user`(`name`, `pass`, `status`, `time`) VALUES("admin123", "123456", 1, "'.time().'")';
// 4. 执行SQL语句
$res = $pdo->exec($sql);
echo "<pre>";
var_dump($res);
var_dump($pdo->errorInfo()); // 返回错误信息
var_dumo($pdo->lastInsertId()); // 返回最后插入ID
运行结果:
注:如果返回结果为0,则表示执行失败,因为ID的最小值为1。
4) PDOStatement 对象
fetch(); // 返回值:一维数组
fetchALL(); // 返回值:二维数组
PDO::FETCH_ASSOC // 关联
PDO::FETCH_NUM
// 索引
PDO::FETCH_BOTH
// 混合【默认】
二、PDO项目实战
1)准备工作:
① 新建一个 index.php 文件
② 在 index.php 文件中,写入简单的页面样式
<html lang="en">
<head>
<meta charset="UTF-8" />
<title> PDO实战 </title>
<style>
body{margin: 0; padding: 0;}
table{border-collapse: collapse; width: 100%;}
tr{transition: all .2s;}
th,td{border: 2px solid #ccc; text-align: center;}
th{height: 50px;}
td{height: 38px;}
tr:hover{background-color: #eef3fa;}
</style>
</head>
<body>
<table>
<caption> <h2>俊男美女</h2> </caption>
<tr>
<th> 编号 </th>
<th> 电话 </th>
<th> 姓名 </th>
<th> 性别 </th>
<th> 生日 </th>
<th> 注册时间 </th>
</tr>
<tr>
<td> 007 </td>
<td> 18888888888 </td>
<td> 小明 </td>
<td> 男 </td>
<td> 1998-02-04 </td>
<td> 2018-05-20 </td>
</tr>
</table>
</body>
</html>
③ 用户表 user(以下是我测试导出的数据表,可以直接放到命令行执行,也可以创建一个后缀名为.sql的文件,然后导入)
/*
Navicat MySQL Data Transfer
Source Server
: mysql
Source Server Version : 50553
Source Host
: localhost:3306
Source Database
: s73
Target Server Type
: MYSQL
Target Server Version : 50553
File Encoding
: 65001
Date: 2018-08-17 12:39:25
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tel` char(11) NOT NULL COMMENT '电话',
`name` varchar(30) DEFAULT NULL COMMENT '名字',
`pwd` char(32) NOT NULL COMMENT '密码',
`sex` tinyint(1) DEFAULT '1' COMMENT '性别 1-男
2-女',
`birthday` date DEFAULT NULL COMMENT '出生日期',
`icon` varchar(255) DEFAULT NULL COMMENT '头像',
`address` varchar(255) DEFAULT NULL COMMENT '地址',
`status` tinyint(1) DEFAULT '1' COMMENT '状态 1-激活 2-禁用',
`regtime` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `tel` (`tel`)
) ENGINE=MyISAM AUTO_INCREMENT=43 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '13888888888', '张三', 'e10adc3949ba59abbe56e057f20f883e', '1', '2018-01-15', '', '上海市宝山区', '1', '1515556191');
INSERT INTO `user` VALUES ('2', '13666666668', '李四', 'e10adc3949ba59abbe56e057f20f883e', '0', '2018-01-15', null, '上海市静安区', '1', '1515556191');
2) 查询操作
① 查询所有用户的数据,此时要使用PDO进行数据库操作分为以下四步:
- 链接数据库
$dsn = 'mysql:dbname=s73;host=localhost;charset=utf8';
$user = 'root';
$pwd = '123456';
$pdo = new PDO($dsn, $user, $pwd);
- 执行SQL语句
$sql = 'SELECT `id`, `tel`, `name`, `sex`, `birthday`, `regtime` FROM `user` ORDER BY `id`'; // 排序可加可不加,此处是用的默认排序
- 执行SQL语句, query(),返回PDOStatement对象
$res = $pdo->query($sql);
- 分析结果集
$data = $res->fetchALL(PDO::FETCH_ASSOC); // 返回关联数组(二维)
var_dump($data); // 可以将结果打印出来查看
② 将查询到的数据遍历到页面
<?php foreach ($data as $k => $v): ?>
<tr>
<td> <?= $v['id']; ?> </td>
<td> <?= $v['tel']; ?> </td>
<td> <?= $v['name']; ?> </td>
<td> <?= $v['sex'] == 1 ? '男' : '女'; ?> </td>
<td> <?= $v['birthday']; ?> </td>
<td> <?= date('Y-m-d H:i:s', $v['regtime']); ?> </td>
</tr>
<?php endforeach ?>
③ 完整代码及运行结果:
<?php
// 查询所有的用户数据
// 1. 链接数据库
$dsn = 'mysql:dbname=s73;host=localhost;charset=utf8';
$user = 'root';
$pwd = '123456';
$pdo = new PDO($dsn, $user, $pwd);
// 2. 执行SQL语句
$sql = 'SELECT `id`, `tel`, `name`, `sex`, `birthday`, `regtime` FROM `user` ORDER BY `id`';
// 3. 执行SQL语句,query(), 返回PDOStatement对象
$res = $pdo->query($sql);
// 4. 分析结果集
$data = $res->fetchALL(PDO::FETCH_ASSOC);
// echo "<pre>";
// var_dump($data);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title> PDO实战 </title>
<style>
body{margin: 0; padding: 0;}
table{border-collapse: collapse; width: 100%;}
tr{transition: all .2s;}
th,td{border: 2px solid #ccc; text-align: center;}
th{height: 50px;}
td{height: 38px;}
tr:hover{background-color: #eef3fa;}
</style>
</head>
<body>
<table>
<caption> <h2>俊男美女</h2> </caption>
<tr>
<th> 编号 </th>
<th> 电话 </th>
<th> 姓名 </th>
<th> 性别 </th>
<th> 生日 </th>
<th> 注册时间 </th>
</tr>
<!-- 测试代码
-->
<tr>
<td> 007 </td>
<td> 18888888888 </td>
<td> 小明 </td>
<td> 男 </td>
<td> 1998-02-04 </td>
<td> 2018-05-20 </td>
</tr>
<!-- 实例 -->
<?php foreach ($data as $k => $v): ?>
<tr>
<td> <?= $v['id']; ?> </td>
<td> <?= $v['tel']; ?> </td>
<td> <?= $v['name']; ?> </td>
<td> <?= $v['sex'] == 1 ? '男' : '女'; ?> </td>
<td> <?= $v['birthday']; ?> </td>
<td> <?= date('Y-m-d H:i:s', $v['regtime']); ?> </td>
</tr>
<?php endforeach ?>
</table>
</body>
</html>
运行结果:
可以将模板中的 测试代码 去掉,如下操作:
最终运行结果:
3)删除操作
① 准备 删除按钮 和 跳转链接,及跳转的页面(此处为了效果明显使用跳转页面),代码如下:
<?php
// 查询所有的用户数据
// 1. 链接数据库
$dsn = 'mysql:dbname=s73;host=localhost;charset=utf8';
$user = 'root';
$pwd = '123456';
$pdo = new PDO($dsn, $user, $pwd);
// 2. 执行SQL语句
$sql = 'SELECT `id`, `tel`, `name`, `sex`, `birthday`, `regtime` FROM `user` ORDER BY `id`';
// 3. 执行SQL语句,query(), 返回PDOStatement对象
$res = $pdo->query($sql);
// 4. 分析结果集
$data = $res->fetchALL(PDO::FETCH_ASSOC);
// echo "<pre>";
// var_dump($data);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title> PDO实战 </title>
<style>
body{margin: 0; padding: 0;}
table{border-collapse: collapse; width: 100%;}
tr{transition: all .2s;}
th,td{border: 2px solid #ccc; text-align: center;}
th{height: 50px;}
td{height: 38px;}
a{color: #1303FA; text-decoration: none; margin-right: 5px;}
tr:hover{background-color: #eef3fa; cursor: pointer;}
</style>
</head>
<body>
<table>
<caption> <h2>俊男美女</h2> </caption>
<tr>
<th> 编号 </th>
<th> 电话 </th>
<th> 姓名 </th>
<th> 性别 </th>
<th> 生日 </th>
<th> 注册时间 </th>
<th> 操作 </th>
</tr>
<!-- 实例 -->
<?php foreach ($data as $k => $v): ?>
<tr>
<td> <?= $v['id']; ?> </td>
<td> <?= $v['tel']; ?> </td>
<td> <?= $v['name']; ?> </td>
<td> <?= $v['sex'] == 1 ? '男' : '女'; ?> </td>
<td> <?= $v['birthday']; ?> </td>
<td> <?= date('Y-m-d H:i:s', $v['regtime']); ?> </td>
<td>
<a href=""> 更新 </a>
<a href="del.php?id=<?= $v['id']; ?>"> 删除 </a>
</td>
</tr>
<?php endforeach ?>
</table>
</body>
</html>
页面效果:
② 新建 del.php 文件
// 专门删除数据
// 1. 链接数据库
$dsn = 'mysql:dbname=s73;host=localhost;charset=utf8';
$user = 'root';
$pwd = '123456';
$pdo = new PDO($dsn, $user, $pwd);
// 2. 准备SQL语句
$id = $_GET['id']; // 接收ID
$sql = 'DELETE FROM `user` WHERE `id` = '. $id;
// 3. 执行SQL语句,exec() 返回受影响行数(1-成功 0-失败)
$res = $pdo->exec($sql);
// 4. 跳转页面
header('location: index.php');
运行结果:
最后
以上就是犹豫果汁为你收集整理的【PHP7 面向对象 笔记整理二】数据库抽象层PDO使用及实战一、数据库抽象层(PDO)二、PDO项目实战的全部内容,希望文章能够帮你解决【PHP7 面向对象 笔记整理二】数据库抽象层PDO使用及实战一、数据库抽象层(PDO)二、PDO项目实战所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复