批改状态:合格
老师批语:理解了数据库操作的流程比会用哪种方式实现更重要, pdo是目前主流方式, 如果遇到mysqli的项目, 相信你也会很快上手
config/database.php
<?php//声明命名空间namespace pdo_edu;//将连接数据库参数以数组方式进行返回//连接数据库配置参数return[// 数据库类型'type' => $type ?? 'mysql',// 数据库地址'host' => $host ?? 'localhost',// 数据库名'dbname' => $dbname ?? 'php11.edu',// 数据库编码集'charset' => $charset ?? 'utf8',// 数据库端口号'port' => $port ?? '3306',// 数据库用户名'username' => $username ?? 'root',// 数据库密码'password' => $password ?? 'root',];
connect.php
<?php//链接数据库//声明命名空间namespace pdo_edu;//使用全局系统对象use PDO;use Exception;//加载配置参数$config = require 'config/database.php';//数组键值对转为名值对/*** @var string $type* @var string $host* @var string $dbname* @var string $charset* @var string $port* @var string $username* @var string $password* */extract($config);//创建dsn$dsn = sprintf('%s:host=%s;dbname=%s',$type,$host,$dbname);//修改默认用户名和密码$username = 'php11.edu';$password = 'php11.edu';//链接数据库try {$pdo = new PDO($dsn,$username,$password);// 测试有没有链接成功// var_dump($pdo); // 输出 object(PDO)#1 (0) { } 链接成功}catch (Exception $e){die($e->getMessage());}
insert.php
<?php//创建命名空间namespace pdo_edu;//加载连接数据库文件require 'connect.php';//操作数据表 增 INSERT//sql命令格式 INSERT 表名 SET 数据。。。//创建sql语句//通常这些数据以数组形式输入 如果是索引数组使用//$sql = "INSERT `staffs` SET `name` = ? ,`age` = ? , `sex` = ? , `position` = ? , `mobile` = ? , `hiredate` = ?";//如果是关联数组 使用$sql = "INSERT `staffs` SET `name` = :name ,`age` = :age , `sex` = :sex , `position` = :position , `mobile` = :mobile , `hiredate` = :hiredate";//通常向数据库添加数据 获取$_POST数据 以POST数据为例//当前没有POST数据 手动创建POST数据$_POST = ['name'=>'大西瓜','age'=>'25','sex'=>'1','position'=>'夏季消暑扛把子','mobile'=>'18899998888','hiredate'=>''];//hiredate 时间戳取当前时间戳$_POST['hiredate'] = time();//开始写入$stmt = $pdo->prepare($sql);$stmt->execute($_POST);//判断是否执行成功//$stmt->rowCount() 返回该操作受影响的记录数量//$pdo->lastInsertId(); 返回写入操作最后一个idif ($stmt->rowCount() === 1){echo '新增成功id = '.$pdo->lastInsertId();}else{echo '写入失败';}//输出 新增成功id = 412

delete.php
<?php//删除数据库中的某条数据//声明命名空间namespace pdo_edu;//加载数据库require 'connect.php';//操作数据表 删 DELETE$sql = "DELETE FROM `staffs` WHERE `id`=:id";//开始执行$stmt = $pdo->prepare($sql);//删除通常使用get方式//所以要过滤一下,防止sql注入攻击//检测 get方式提交表单中的id是不是数字if (!filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT)){$_GET['id'] = '非法数据';}////断掉进程测试一下判断是否生效//echo $_GET['id']; //delete.php?id=s1 输出 非法数据 delete.php?id=1 输出 1//die();$stmt->execute($_GET);//判断是否执行成功if ($stmt->rowCount()=== 1) {echo '删除成功';}else{echo '删除失败';}//执行 /delete.php?id=412 输出 删除成功

update.php
<?phpnamespace pdo_edu;require 'connect.php';//把 id = 411 的 name position 改掉$sql = "UPDATE `staffs` SET `name` = ? , `position` = ? WHERE `id` = ?";$stmt = $pdo->prepare($sql);$stmt->execute(['大冬瓜','冬季驱寒扛把子',411]);//判断是否执行成功if ($stmt->rowCount() === 1){echo '修改成功';}else{echo '没有记录被更新';// 打印返回数组print_r($stmt->errorUInfo());}//访问输出 修改成功

select1.php
<?phpnamespace pdo_edu;//下面查询语句中要使用PDO对象 use一下use PDO;require 'connect.php';//查询数据库中年龄大于40的员工 *表示返回所有数据 如果只想要id name 就输入 `id`,`name`$sql = 'SELECT * FROM `staffs` WHERE `age`>40';$stmt = $pdo->prepare($sql);$stmt->execute();printf('<pre>%s</pre>',print_r($stmt->fetch(PDO::FETCH_ASSOC),true));//输出 Array//(// [id] => 2// [name] => 祁同伟// [age] => 46// [sex] => 1// [position] => 公安厅长// [mobile] => 13023456110// [hiredate] => 1420041600//)//如果你要获取多条while ($staff = $stmt->fetch(PDO::FETCH_ASSOC)){printf('<pre>%s</pre>',print_r($staff ,true));}//输出 这里这复制了部分过来 他会一直输出直到没有符合条件为止 Array//(// [id] => 3// [name] => 高育良// [age] => 57// [sex] => 1// [position] => 政法书记// [mobile] => 15678789933// [hiredate] => 981734400//)//Array//(// [id] => 4// [name] => 李达康// [age] => 51// [sex] => 1// [position] => 市委书记// [mobile] => 13088856110// [hiredate] => 1336838400//)//Array//(// [id] => 5// [name] => 沙瑞金// [age] => 56// [sex] => 1// [position] => 省委书记// [mobile] => 18956490987// [hiredate] => 1179158400//)
select2.php
<?php//其实就是把 fetch 改成 fetchAll//fetch 返回一维数组//fetchAll 返回二维数组namespace pdo_edu;//下面查询语句中要使用PDO对象 use一下use PDO;require 'connect.php';//查询数据库中年龄大于40的员工 *表示返回所有数据 如果只想要id name 就输入 `id`,`name`$sql = 'SELECT * FROM `staffs` WHERE `age`>40';$stmt = $pdo->prepare($sql);$stmt->execute();//printf('<pre>%s</pre>', print_r($stmt->fetchAll(PDO::FETCH_ASSOC), true));//如果你要显示它 使用 foreach$staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);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);}//输出 id=2:姓名=祁同伟---职位=公安厅长---入职时间=2014年12月31日//id=3:姓名=高育良---职位=政法书记---入职时间=2001年02月09日//id=4:姓名=李达康---职位=市委书记---入职时间=2012年05月12日//id=5:姓名=沙瑞金---职位=省委书记---入职时间=2007年05月14日//id=6:姓名=赵东来---职位=公安局长---入职时间=2013年08月07日//id=8:姓名=陈清泉---职位=外语学霸---入职时间=2011年11月10日//id=10:姓名=陆亦可---职位=调查处长---入职时间=2008年08月09日//id=12:姓名=祁同伟---职位=公安厅长---入职时间=2014年12月31日//id=13:姓名=高育良---职位=政法书记---入职时间=2001年02月09日
前几天有事耽搁了,不过感觉现在写这个作业跟课后第二天写作业完全不一样,最近几天一直在使用PDO ,以前课后就写是记录操作方法,今天写这个博客就像是在复习,所有语句都明白是什么意思~ 算不上手到擒来也差不多 mysqli暂时不想学了,因为目前用不到,而且有PDO就足够了,学了也会忘浪费时间,不如将时间用到有意义的事情上面,不知道我这个想法对不对
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号