批改状态:合格
老师批语:考你个问题,数据表的自增ID, 用完了怎么了?
我们对数据库内容的操作,按操作方式可以分为增删改查(CURD),按数据是否变化:分为读与写两种。读:即是查询(select),写:即是增加(insert),更新(update),删除(delete)。
如下图,我们创建了张原始数据表
接下来,我们要对这个数据库的内容进行增删改查的操作。
首先需要配置数据库参数
namespace pdo_edu;//数据库连接配置参数return[// 1.数据库的类型'type' => $type ?? 'mysql',// 2.数据库的默认主机'host' => $host ?? 'localhost',// 3.默认数据库'dbname' => $dbname ?? 'phpedu',// 4.默认的字符编码集'charset' => $charset ?? 'utf8',// 5.默认的端口号'port' => $port ?? '3306',// 6.默认的用户名'username' => $username ?? 'root',// 7.默认的用户密码'password' => $password ?? 'root',];
接着创建”connect.php”代码,这个是连接桥梁。
namespace pdo_edu;use Exception;use PDO;//加载配置参数$config = require 'config/database.php';//PDO连接数据库三要素,三个重要参数://数据源:DSN//用户名:username//用户密码:password//DSN :数据库类型:host=数据库的主机地址;dbname=默认的数据库名称;chart=...;prot=...$type = $config['type'];$host = $config['host'];$dbname = $config['dbname'];$username = $config['username'];$password = $config['password'];//创建DSN$dsn = sprintf('%s:host=%s;dbname=%s',$type,$host,$dbname);try {//连接数据库$pdo = new PDO($dsn,$username,$password);}catch(Exception $e) {die($e->getMessage());}
可以分为单条查询和多条查询。
1.单条查询代码举例:
namespace pdo_edu;use PDO;// 1.连接数据库require 'connect.php';// 2.操作数据表// $sql = 'SELECT 字段列表 FROM 数据表名称 WHERE查询条件'$sql = 'SELECT `id`, `name` FROM `staffs` WHERE `age` >40';//预处理对象:$stmt = $pdo->prepare($sql);//预处理对象¥stmt,就是SQL语句对象//使用预处理对象调用 execute()执行这条sql语句$stmt->execute();//使用:debugDumpParams()调试/查看// var_dump($stmt->debugDumpParams());while ($staff = $stmt->fetch(PDO::FETCH_ASSOC)) {printf('<pre>%s</pre>',print_r($staff,true));}// 3.关闭连接(以下两种方式可任选一种)// $pdo = null;unset($pdo);
查询到的结果输出:
2.多条查询代码举例:
namespace pdo_edu;use PDO;// 1.连接数据库require 'connect.php';// 2.操作数据表// $sql = 'SELECT 字段列表 FROM 数据表名称 WHERE查询条件'//匿名占位符:?// $sql = 'SELECT * FROM `staffs` WHERE `age` > ?';//命名占位符:给一个有意义的字符串,必须用冒号开始$sql = 'SELECT * FROM `staffs` WHERE `age` > :age';$stmt = $pdo->prepare($sql);//对应匿名占位符使用的是索引数组// $stmt->execute([40]);//对应命名占位符使用的是关联数组$stmt->execute([':age'=>60]);$staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);//需要熟记:PDO::FETCH_ASSOC// print_r($staffs);foreach ($staffs as $staff) {$date = date('Y年m月d日',$staff['hiredate']);printf('id=%s: 姓名=%s ---职位=%s ---入职时间=%s<br>',$staff['id'],$staff['name'],$staff['position'],$date);}// 3.关闭连接unset($pdo);
查询到的结果输出:
代码举例:
namespace pdo_edu;use PDO;// 1.连接数据库require 'connect.php';// 2.操作数据表// $sql = "UPDATE 表名 SET 字段=新值 WHERE 更新条件";// $sql = "UPDATE `staffs` SET `name`= ? WHERE `id`=? ";//修改名字// $sql = "UPDATE `staffs` SET `age`= ? WHERE `id`=? ";//修改年龄$sql = "UPDATE `staffs` SET `sex`= ? WHERE `id`=? ";//修改性别$stmt = $pdo->prepare($sql);$stmt->execute(['1',9]);//判断是否执行成功// $stmt->rowCount():返回写操作产生的受影响的记录数量if ($stmt->rowCount() === 1) {echo '更新成功';} else {echo '没有记录被更新';print_r($stmt->errorInfo());}// 3.关闭连接unset($pdo);
输出效果:
三、数据库更新
代码举例:
namespace pdo_edu;use PDO;// 1.连接数据库require 'connect.php';// 2.操作数据表// $sql = 'INSERT 表名 SET name=?,age=?,....';$sql = "INSERT `staffs` SET `name`= ? , `age`= ? , `sex`= ? ,`position`= ? , `mobile`= ? , `hiredate`= ?";$stmt = $pdo->prepare($sql);$data = ['李明一',27,1,'农办主任','15637789652',1579244075];$stmt ->execute($data);//判断是否执行成功// $stmt->rowCount():返回写操作产生的受影响的记录数量if ($stmt->rowCount() === 1) {echo '新增成功,还可以获取新增记录的主键是:' . $pdo->lastInsertId();} else {echo '新增失败';print_r($stmt->errorInfo());}// 3.关闭连接unset($pdo);
输出效果:
代码举例:
namespace pdo_edu;use PDO;// 1.连接数据库require 'connect.php';// 2.操作数据表// $sql = "DELETE FROM 表名 WHERE 删除条件";$sql = "DELETE FROM `staffs` WHERE `id`= ?";$stmt = $pdo->prepare($sql);$stmt->execute([19]);//判断是否执行成功// $stmt->rowCount():返回写操作产生的受影响的记录数量if ($stmt->rowCount() === 1) {echo '删除成功';} else {echo '删除失败';print_r($stmt->errorInfo());}// 3.关闭连接unset($pdo);
输出效果:
1.数据库的id一旦创建之后,只能一条一条往前增加,若是删除了中间的id,则跳过被删除的数字,继续往前增加。
2.对数据库的有用的操作,好像也只有查询、修改、增加、删除了。
3.需要熟记的常用语句需要达到默写级别。
4.注意:对数据库的操作需要先引入数据库。PDO连接数据库三要素,三个重要参数,数据源:DSN;用户名:username;用户密码:password。
5.在做数据库连接时需费些心思,后面对数据库的操作,一个模子下来,修改几个参数即可。
6.整个流程的操作,类似于我们在计算机上对文件夹里面的内容进行增删改查,例如,我们可以对文件夹里面的内容进行查找、复制、重命名、删除。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号