批改状态:合格
老师批语: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: 新增记录的主键idprintf('成功的新增了 %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: 新增记录的主键idforeach($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();

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号