Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
<?php
namespace php_edu;
use PDO;
/**
* 数据库常用操作
* 1. 读操作: select
* 2. 写操作: insert,update,delete
* 简称: CURD, 增删改查
*/
// 1. 连接数据库
require __DIR__ . '/config/connect.php';
// 2. CURD: INSERT
/**
* PDO预处理
* 为什么要用预处理?
* 1. 防止SQL注入攻击, 2. 数据延迟绑定
* (编程时只写SQL语句模板,执行SQL时再给占位符绑定真实数据)
* 预处理过程:
* 1. 创建SQL语句模板对象: 数据使用占位符表示
* 2. 执行SQL语句,根据操作类型(写/读),读返回结果集/数组, 写返回受影响的记录数量
*/
// INSERT 插入
// INSERT 表名 SET 字段1=值1, 字段2=值2, ....
// SQL语句的推荐规范:
// 1. 关键字全大写
// 2. 表名,字段名使用反引号做为定界符
$sql = 'INSERT `myhome` SET `name` = ?, `sex` = ?, `email` = ?';
// 1. 创建SQL语句模板对象
$stmt = $db->prepare($sql);
// var_dump($stmt);
// 2. 执行SQL语句
$stmt->execute(['爸爸', 0, 'father@qq.com']);
$stmt->execute(['妈妈', 1, 'mother@qq.com']);
$stmt->execute(['爷爷', 0, 'grandpa@qq.com']);
$stmt->execute(['奶奶', 1, 'grandma@qq.com']);
$stmt->execute(['哥哥', 0, 'brother@qq.com']);
$stmt->execute(['姐姐', 1, 'sister@qq.com']);
$stmt->execute(['我自己', 0, 'myself@qq.com']);
// 成功
// $stmt->rowCount(): 返回受影响的记录数量
if ($stmt->rowCount() > 0) {
echo '新增成功, 新增记录的主键ID = ' . $db->lastInsertId();
} else {
echo '新增失败';
print_r($stmt->errorInfo());
}
// 2. CURD: UPDATE 更新
$sql = 'UPDATE `myhome` SET `name` = ? WHERE `id` = ?';
$stmt = $db->prepare($sql);
$stmt->execute(['夏天', 1]);
if ($stmt->rowCount() > 0) {
echo '更新成功';
} else {
echo '更新失败';
print_r($stmt->errorInfo());
}
echo '<hr>';
// 3. CURD: DELETE 删除
$sql = 'DELETE FROM `myhome` WHERE `id` = ?';
$stmt = $db->prepare($sql);
$stmt->execute([2]);
if ($stmt->rowCount() > 0) {
echo '删除成功';
} else {
echo '删除失败';
print_r($stmt->errorInfo());
}
echo '<hr>';
// 4. CURD: SELECT 单条查询
// SELECT 字段列表 FROM 表名 WHERE 查询条件
$sql = 'SELECT `id` ,`name` FROM `myhome` WHERE `id` > :id';
$stmt = $db->prepare($sql);
$stmt->execute(['id'=>6]);
// 单条查询
$myhome = $stmt->fetch(PDO::FETCH_ASSOC);
printf('<pre>%s</pre>', print_r($myhome, true));
echo '<hr>';
// 5. CURD: SELECT 多条查询
// SELECT 字段列表 FROM 表名 WHERE 查询条件
$sql = 'SELECT `id`,`name` FROM `myhome` WHERE `id` > :id';
$stmt = $db->prepare($sql);
$stmt->execute(['id' => 7]);
// fetchAll: 返回全部满足条件的记录集合,二维数组
$myhomes = $stmt->fetchAll();
// print_r($staffs);
foreach ($myhomes as $myhome) {
printf('<pre>%s</pre>', print_r($myhome, true));
}
数据库更新如下: