Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:理解了数据库操作的流程比会用哪种方式实现更重要, 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(); 返回写入操作最后一个id
if ($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
<?php
namespace 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
<?php
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->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就足够了,学了也会忘浪费时间,不如将时间用到有意义的事情上面,不知道我这个想法对不对