Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:curd是最常用的操作, 必须彻底掌握
1、使用mysqli面向对象,实现常用的CURD操作
连接数据库
// 导入配置文件
$config = require '0823-2config.php';
extract($config);//extract() 函数从数组中将变量导入到当前的符号表
//mysqli(数据库的主机名, 用户名, 用户密码,默认的数据库)
//1、连接数据库
$mysqli = new mysqli($host, $username, $password, $dbname);
//2、exit()、die()终止运行,后面的内容将不会显示
if ($mysqli->connect_errno) die('Connect Error: '. $mysqli->connect_error);
// 3. 设置字符编码
$mysqli->set_charset($charset);
// echo '连接成功';
数据库配置
//连接参数
return[
'type' => $type ?? 'mysql',//数据库类型
'host' => $username ?? 'localhost',//默认主机名
'charset' => $charset ?? 'utf8',// 默认编码集
'port' => $porst ?? '3306',// 默认端口号
'username' => $usernam ?? 'root',// 默认用户名
'password' => $password ?? 'root',// 默认用户的密码
'dbname' => $dbname ?? 'phpedu',// 默认数据库
];
新增数据
//mysqli新增数据
//1、连接数据库
require '0823-2.php';
//2、操作数据表(新增INSERT)
//数据表不能够随便自定义,数据表都是定义好的名字,应该加上反引号“ ` ”。如果你的数据表和当前mysql中的一些关键字相同时就会出现命名冲突,加上反引号`之后就不用担心此问题
// 'INSERT `数据表` ( 字段列表 ) VALUES (字段对应的值), ( 字段列表 ) VALUES (字段对应的值)';
// 2-1)生成sql语句的模板对象
// INSERT INTO ... VALUES
// $sql="INSERT INTO `user` (`name`,`email`,`password`) VALUES (?,?,?)";//?表示匿名占位符
// INSERT .... SET
$sql = 'INSERT `user` SET `name`=?, `email`=?, `password`=?;';
// prepare()相当于sql语句对象的构造方法,用来创建一个:预处理对象(sql语句对象)
// 预处理,将sql语句的执行分成二步, 第一步生成语句的模板, 第二步在执行时再给模板中的占位符赋值
// 这样操作可以有效的防止 sql 注入攻击
$stmt=$mysqli->prepare($sql);//预处理语句
//2-2)给占位符绑定变量名
//bind_param():绑定SQL 的参数,且告诉数据库参数的值
// "sss" 参数列处理其余参数的数据类型。s表示该参数为字符串;i表示整数;b表示布尔值;d表示双精度浮点型
$stmt->bind_param('sss',$name,$email,$password);
//2-3)设置参数并执行
$name='李四';
$email='lisi@qq.com';
$password=sha1('23456');//sha1()加密
// 执行sql语句,如果失败打印出出错信息
$stmt->execute() or die($stmt->error);
//3、对执行的结果进行处理
// $stmt->affected_rows: 返回受影响的记录数量
// $stmt->insert_id: 新增记录的主键id
printf('成功的新增了 %s 条记录, 新增主键id是: %d',$stmt->affected_rows, $stmt->insert_id);
//4、关闭连接(可选)
$mysqli->close();
//mysqli新增多条数据
//1、连接数据库
require '0823-2.php';
//2、操作数据表(新增INSERT)
// 2-1)生成sql语句的模板对象
// INSERT .... SET
$sql = 'INSERT `user` SET `name`=?, `email`=?, `password`=?;';
$stmt=$mysqli->prepare($sql);//预处理语句
//2-2)给占位符绑定变量名
//bind_param():绑定SQL 的参数,且告诉数据库参数的值
// "sss" 参数列处理其余参数的数据类型。s表示该参数为字符串;i表示整数;b表示布尔值;d表示双精度浮点型
$stmt->bind_param('sss',$name,$email,$password);
//2-3)设置参数并执行,将新增的多条记录,放在一个二维数组中
$users=[
['name'=>'王五','email'=>'wangwu@qq.com','password'=>sha1('234536')],
['name'=>'赵六','email'=>'zhaoliu@qq.com','password'=>sha1('232456')],
['name'=>'赵七','email'=>'zhaoqi@qq.com','password'=>sha1('2372456')],
];
//3、对执行的结果进行处理
// $stmt->affected_rows: 返回受影响的记录数量
// $stmt->insert_id: 新增记录的主键id
foreach($users as $user){
extract($user);
if ($stmt->execute())
printf('成功的新增了 %s 条记录, 新增主键id是: %d <br>',$stmt->affected_rows, $stmt->insert_id);
else//errno(错误代码),error(错误文本)
exit(sprintf('新增失败, $d, $s', $stmt->errno, $stmt->error));
}
//4、关闭连接(可选)
$mysqli->close();
//mysqli更新数据
//1、连接数据库
require '0823-2.php';
//2、操作数据表(更新UPDATE),必须要更新条件
// 2-1)生成sql语句的模板对象
$sql = 'UPDATE `user` SET `name`=?, `email`=?, `password`=? WHERE `id`=?;';
$stmt=$mysqli->prepare($sql);//预处理语句
//2-2)给占位符绑定变量名
//bind_param():绑定SQL 的参数,且告诉数据库参数的值
// "sss" 参数列处理其余参数的数据类型。s表示该参数为字符串;i表示整数;b表示布尔值;d表示双精度浮点型
$stmt->bind_param('sssi',$name,$email,$password,$id);
//2-3)设置参数并执行
$user=['name'=>'马七','email'=>'maqi@qq.com','password'=>sha1('239356'),'id'=>7];
extract($user);//extract()将关联数组的键值对转为一个个独立的变量, 变量名就是原来的键名
$stmt->execute() or die($stmt->error);
//3、对执行的结果进行处理
if ($stmt->affected_rows === 1)
printf('成功的更新了 %s 条记录',$stmt->affected_rows);
else echo '没有记录被更新';
//4、关闭连接(可选)
$mysqli->close();
//mysqli删除数据
//1、连接数据库
require '0823-2.php';
//2、操作数据表(删除DELETE FROM),必须要有条件
// 2-1)生成sql语句的模板对象
$sql = 'DELETE FROM `user`WHERE `id`=?;';
$stmt=$mysqli->prepare($sql);//预处理语句
//2-2)给占位符绑定变量名
//bind_param():绑定SQL 的参数,且告诉数据库参数的值
// s表示该参数为字符串;i表示整数;b表示布尔值;d表示双精度浮点型
$stmt->bind_param('i',$id);
//2-3)设置参数并执行
$id=7;
$stmt->execute() or die($stmt->error);
//3、对执行的结果进行处理
if ($stmt->affected_rows === 1)
printf('成功的删除了 %s 条记录',$stmt->affected_rows);
else echo '没有记录被删除';
//4、关闭连接(可选)
$mysqli->close();
//逐条查询
//1、连接数据库
require '0823-2.php';
//2、操作数据表
// 2-1)生成sql语句的模板对象
//* 号表示数据表中的所有字段
$sql = 'SELECT `id`,`name`,`email` FROM `user` WHERE `id`>?;';
$stmt=$mysqli->prepare($sql);//预处理对象
//2-2)给占位符绑定变量名
//bind_param():绑定SQL 的参数,且告诉数据库参数的值
// s表示该参数为字符串;i表示整数;b表示布尔值;d表示双精度浮点型
$stmt->bind_param('i',$id);
//2-3)设置参数并执行
$id=3;//查询数据表中id>3的数据信息
$stmt->execute() or die($stmt->error);
// 如果是select语句, execute()执行完毕后,会生成一个结果集对象
// get_result()获取结果集对象
$result = $stmt->get_result();
//num_rows() 判断返回的数据,等于0获取的结果集为空,未获取到数据
if ($result->num_rows === 0) exit('结果集为空');
//3、对执行的结果进行处理
//如果返回的是多条数据,fetch_assoc()将结果集放入到关联数组并循环输出。while()循环出结果集,并输出对应的字段值
while ($user=$result->fetch_assoc()) {
vprintf('%d, %s , %s <br>', $user);
}
// 4. 释放结果集
$result->free();
//5、关闭连接(可选)
$mysqli->close();
//一次性获取所有满足条件的数据信息
//1、连接数据库
require '0823-2.php';
//2、操作数据表
// 2-1)生成sql语句的模板对象
//* 号表示数据表中的所有字段
$sql = 'SELECT `id`,`name`,`email` FROM `user` WHERE `id`>?;';
$stmt=$mysqli->prepare($sql);//预处理对象
//2-2)给占位符绑定变量名
//bind_param():绑定SQL 的参数,且告诉数据库参数的值
// s表示该参数为字符串;i表示整数;b表示布尔值;d表示双精度浮点型
$stmt->bind_param('i',$id);
//2-3)设置参数并执行
$id=3;//查询数据表中id>3的数据信息
$stmt->execute() or die($stmt->error);
// 如果是select语句, execute()执行完毕后,会生成一个结果集对象
// get_result()获取结果集对象
$result = $stmt->get_result();
//num_rows() 判断返回的数据,等于0获取的结果集为空,未获取到数据
if ($result->num_rows === 0) exit('结果集为空');
//一次性获取所有满足条件的记录
// MYSQLI_ASSOC只返回关联部分;MYSQLI_NUM默认,只返回索引数组部分;MYSQLI_BOTH二者都有
$users = $result->fetch_all(MYSQLI_ASSOC);
//3、对执行的结果进行处理
//如果返回的是多条数据,fetch_assoc()将结果集放入到关联数组并循环输出。while()循环出结果集,并输出对应的字段值
foreach ($users as $user) {
vprintf('%d, %s , %s <br>', $user);//vprintf() 函数输出格式化的字符串
// print_r($user);
}
// 4. 释放结果集
$result->free();
//5、关闭连接(可选)
$mysqli->close();
//一次性获取所有满足条件的数据信息
//1、连接数据库
require '0823-2.php';
//2、操作数据表
// 2-1)生成sql语句的模板对象
//* 号表示数据表中的所有字段
$sql = 'SELECT `id`,`name`,`email` FROM `user` WHERE `id`>?;';
$stmt=$mysqli->prepare($sql);//预处理对象
//2-2)给占位符绑定变量名
//bind_param():绑定SQL 的参数,且告诉数据库参数的值
// s表示该参数为字符串;i表示整数;b表示布尔值;d表示双精度浮点型
$stmt->bind_param('i',$id);
//2-3)设置参数并执行
$id=3;//查询数据表中id>3的数据信息
$stmt->execute() or die($stmt->error);
// 将当前结果中的字段"名称"与对应的变量名进行绑定
$stmt->bind_result($id, $name,$email);
// 将字段的"值"与具体的变量名进行绑定
$stmt->store_result();
//num_rows() 判断返回的数据,等于0获取的结果集为空,未获取到数据
if ($result->num_rows === 0) exit('结果集为空');
//3、对执行的结果进行处理
// $stmt->fetch()自动下移指针
while ($stmt->fetch()) {
printf('id=%d, name=%s,email=%s <br>', $id, $name, $email);
}
// 4、关闭连接(可选)
$mysqli->close();