Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
<?php
namespace pdo_edu;
use PDO;
$dbConfig = require 'database.php';
extract($dbConfig);
// pdo连接三要素
// !1.dsn
$tpl = '%s:host=%s;dbname=%s;port=%s;charset=%s';
$args = [$type,$host,$dbname,$port,$charset];
$dsn =sprintf($tpl,...$args);
//!2.创建数据对象
$db = new PDO($dsn,$username,$password);
<?php
namespace pdo_edu;
return
[
//dsn
'type'=>'mysql',
'host'=>'127.0.0.1',
'dbname'=>'phpedu',
'port'=>'3306',
'charset'=>'utf8',
//username
'username'=>'root',
'password'=>'phpedu',
];
<?php
namespace php_edu;
/**
* 数据库常用操作
* 1.读操作:select
* 2.写操作:insert,update,delete
* 简称:CURD,增删改查
*/
//1.连接数据库
require __DIR__ . '/config/connect.php';
//2.CURD:INSERT
//INSERT 插入
// INSERT 表名 SET 字段1=值1,字段2=值2,...
//注意事项
//1.关键字全大写
//2.表名和字段名使用反引号作为定界符
$sql = 'INSERT `staff` SET `name` = ?,`sex` = ?,`email` = ?';
//!1.创建SQL语句模板对象:使用占位符表示
$stmt = $db->prepare($sql);
// var_dump($stmt);
//!2.执行SQL语句
// 可以添加一条或者多条
$stmt->execute(['曹操',0,'caocao@123.com']);
$stmt->execute(['刘备',0,'liubei@123.com']);
$stmt->execute(['貂蝉',1,'diaochan@123.com']);
//成功
// $stmt->rowCount():返回受影响的记录数量
if($stmt->rowCount() > 0) {
echo '新增成功,新增记录的最后主键ID=' . $db->lastInsertId();
} else{
echo '新增失败';
print_r($stmt->errorInfo());
}
<?php
namespace php_edu;
//1.连接数据库
require __DIR__ . '/config/connect.php';
//2.CURD:UPDATE 更新操作
// UPDATE 表名 SET 字段1=值1,字段2=值2,...WHERE 更新条件
$sql = 'UPDATE `staff` SET `name` = ?,`email` = ? WHERE `id`=?';
//!1.创建SQL语句模板对象:使用占位符表示
$stmt = $db->prepare($sql);
// var_dump($stmt);
//!2.执行SQL语句
// 更新一条或者多条
$stmt->execute(['小龙女','xiaolongnv@123.com','4']);
//成功
// $stmt->rowCount():返回受影响的记录数量
if($stmt->rowCount() > 0) {
echo '更新成功';
} else{
echo '更新失败';
print_r($stmt->errorInfo());
}
<?php
namespace php_edu;
//1.连接数据库
require __DIR__ . '/config/connect.php';
//2.CURD:DELETE 删除操作
// DELETE FROM 表名 WHERE 更新条件
// $sql = 'DELETE FROM `staff` WHERE `id`=?';
//'?':匿名占位符
//'string':命名占位符
$sql = 'DELETE FROM `staff` WHERE `id`= :id';
//!1.创建SQL语句模板对象:使用占位符表示
$stmt = $db->prepare($sql);
// var_dump($stmt);
//!2.执行SQL语句
// 更新一条或者多条
// $stmt->execute(['2']);
// $stmt->execute([':id'=>4]);
//通过外部参数删除:例如URL中的get参数删除
// echo $_GET['id'];
// $stmt->execute([':id'=>4]);
$stmt->execute([':id'=>$_GET['id']]);
//成功
// $stmt->rowCount():返回受影响的记录数量
if($stmt->rowCount() > 0) {
echo '删除成功';
} else{
echo '删除失败';
print_r($stmt->errorInfo());
}
单条数据
<?php
namespace php_edu;
use PDO;
//1.连接数据库
require __DIR__ . '/config/connect.php';
//2.CURD:SELECT 查询操作
// SELECT 字段列表 FROM 表名 WHERE 查询条件 LIMIT
$sql = 'SELECT `id`,`name` FROM `staff` WHERE `id` > :id';
//!1.创建SQL语句模板对象:使用占位符表示
$stmt = $db->prepare($sql);
// var_dump($stmt);
//!2.执行SQL语句
$stmt->execute(['id' =>'3']);
//单条查询
// $staff = $stmt->fetch();
//PDO::FETCH_ASSOC:结果集只返回关联数组数据
// $staff = $stmt->fetch(PDO::FETCH_ASSOC);
// printf('<pre>%s</pre>', print_r($staff,true));
// //再执行一遍,指针查询下一条
// $staff = $stmt->fetch(PDO::FETCH_ASSOC);
// printf('<pre>%s</pre>', print_r($staff,true));
//用循环查询符合条件的全部数据
// while($staff = $stmt->fetch(PDO::FETCH_ASSOC)){
// printf('<pre>%s</pre>', print_r($staff,true));
// }
//在connect.php文件中统一设置数据模式:$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
while($staff = $stmt->fetch()){
printf('<pre>%s</pre>', print_r($staff,true));
}
多条查询
<?php
namespace php_edu;
use PDO;
//1.连接数据库
require __DIR__ . '/config/connect.php';
//2.CURD:SELECT 查询操作
// SELECT 字段列表 FROM 表名 WHERE 查询条件 LIMIT
$sql = 'SELECT `id`,`name` FROM `staff` WHERE `id` > :id';
//!1.创建SQL语句模板对象:使用占位符表示
$stmt = $db->prepare($sql);
// var_dump($stmt);
//!2.执行SQL语句
$stmt->execute(['id' =>'3']);
//fetchALL():返回全部满足条件的记录集合
$staffs = $stmt->fetchALL();
// print_r($staffs);
foreach ($staffs as $staff){
printf('<pre>%s</pre>', print_r($staff,true));
}
PDO的本质是将SQL语句和数据分开,编程时只写SQL语句模板,执行SQL时再给占位符绑定真实数据。用预处理的好处有:第一,预处理语句占用更少的资源,因而运行得更快。第二,防止SQL注入攻击。