Correction status:qualified
Teacher's comments:
<?php /** * 1.编程:MySQLi面向对象中的查询操作 * 2. 问答: PDO 的优势 * 3. 编程:PDO 连接数据库 * 4. 编程:PDO新增数据 * 5. 编程: PDO更新数据 * 6. 编程: PDO 删除数据 * 7. 编程:PDO查询数据 * 8. 问答: 获取结果集记录数量的正确方式是什么? */ /创建数据连接属性 $db_host = '127.0.0.1';//数据库地址 $db_user = 'root';//数据库用户名 $db_pass = '';//数据库密码 $db_name = 'php';//数据库名称 $db_charset = 'utf8';//数据库文字编码 //连接数据库 $mysqli = new mysqli($db_host,$db_user,$db_pass,$db_name);//创建连接数据库对象,并连接数据库 $mysqli->set_charset($db_charset);//设置数据库文字编码为UTF8 if ($mysqli->connect_errno){//判断连接错误代码,如果不为空,则输出错误代码和原因 echo '连接失败!错误代码'.$mysqli->connect_errno.':'.$mysqli->connect_error; }else{ // echo '连接成功。'; } $sql = "SELECT `staff_id`,`name`,`salary` FROM `staff` WHERE `salary`>?;";//创建SQL语句,在staff表中查询条件为salary大于某个值的记录,并输出staff_id等这些数据 $stmt = $mysqli->stmt_init();//初始化对象 if ($stmt->prepare($sql)){//预处理SQL语句 $stmt->bind_param('i',$salary);//把变量绑定到参数上。 $salary = 4500; if ($stmt->execute()){//执行SQL语句,如果成功 $stmt->store_result();//把结果放到缓存区 $stmt->bind_result($staff_id,$name,$salary);//把结果集的列,也就是标题绑定到变量上 //先判断有没有符合要求的数据,如果没有就不遍历。 if($stmt->num_rows>0){ //fetch()每次获取一条记录,并将指针下移 while($stmt->fetch()){ echo 'staff_id是:'.$staff_id.'名字是'.$name.',工资是'.$salary.'<br>'; } }else{ exit('没有查询到有关数据。'); } }else{ exit($stmt->errno.$stmt->error); } }else{ exit($stmt->errno.$stmt->error); } /** * 查询逻辑 * 1、连接服务器,成功:进行下一任务,失败返回连接失败。$mysqli->connect_errno,$mysqli->connect_error. * 2、创建一个SQL语句,用于查询、新增、删除、更新等操作用,并赋值给一个变量,针对要处理的数据,使用占位符。查询使用SELECT * 3、预处理一个对象。$stmt->prepare(SQL语句) * 4、判断预处理是否成功,失败则返回错误代码及原因。$stmt->errno,$stmt->error * 5、绑定参数,将变量与SQL语句中要查询的字段(也就是数据库表中的列)绑定,将要查询的数据通过变量传入到SQL语句中。$stmt->bind_param() * 6、开始执行语句,失败则返回错误代码及原因。$stmt->errno,$stmt->error * 7、先将查询到的结果集,都临时保存到缓存区。$stmt-store_result * 8、将结果集中的内容,依次绑定到变量上,用以遍历$stmt->bind_reslut($var,$var,$var) * 9、判断结果集中有没有数据,如无,则直接输出结果。$stmt->num_cows()>0 * 10、使用循环语句进行遍历,fetch()方法可以每次从结果集中获取一个记录,并将指针移至下一条记录,并输出结果。$stmt->fetch() */ <<<HEREDOC 问答: PDO 的优势: PDO提供了一个统一的可以访问多类数据库的接口,作为一个访问数据库的抽象层,无论什么类型的数据库,都可以使用相同的函数和方法来访问。 HEREDOC; //新增一个pdo连接 $pdo = new PDO('mysql:host=127.0.0.1;dbname=php;charset=utf8','root',''); //插入数据 //准备一个SLQ语句 //$insert = "INSERT `user` SET `user_name`=:name,`email`=:email,`password`=sha1(:password)"; // //$stmt = $pdo->prepare($insert); // ////执行语句 // //$stmt->execute(['name'=>'李宗伟','email'=>'huminda91@123.com','password'=>'dddss1123']); //$stmt->execute(['name'=>'李丹','email'=>'huminda@123.com','password'=>'dddss112333']); //$stmt->execute(['name'=>'林丹','email'=>'huminda92@123.com','password'=>'dddss11323']); //$stmt->execute(['name'=>'安塞龙','email'=>'huminda95@123.com','password'=>'ddd3ss11123']); //echo '添加了'.$stmt->rowCount().'条数据。'; //更新数据 //$update = "UPDATE `user` SET `password`=:password WHERE `user_id`=:id;"; // //$stmt = $pdo->prepare($update); // //$stmt->execute(['id'=>23,'password'=>'jjjdddhhh']); //echo '成功更新了'.$stmt->rowCount().'条数据。'; //删除数据 //$delete = "DELETE FROM `user` WHERE `user_id`=:id"; // //$stmt = $pdo->prepare($delete); // //$stmt->execute(['id'=>24]); //echo '成功删除了'.$stmt->rowCount().'条数据。'; //查询数据 //查询语句 $serch = "SELECT `email` ,`user_name` FROM `user` WHERE `user_id`<:id;"; //获取复核条件的数据的数量 $serch_count = "SELECT COUNT(*) FROM `user` WHERE `user_id`<:id;"; //首先准备获取数量的语句,并执行后输出 $stmt = $pdo->prepare($serch_count); $stmt->execute(['id'=>26]); echo '共查询到'.$stmt->fetchColumn().'条数据,分别是:<br>'; //重新准备语句,用于获取输出查询到的数据 $stmt = $pdo->prepare($serch); $stmt->execute(['id'=>26]); //将查询到的数据绑定到列上,以便于输出 $stmt->bindColumn('user_name',$name); $stmt->bindColumn('email',$email); //PDO::FETCH_BOUND以布尔值的形式返回结果,同时将获取的列值(如'user_name'、'email')赋给bindParam()方法中指定的变量($name、$email)。 while ($stmt->fetch(PDO::FETCH_BOUND)){ echo '姓名: ',$name, ', 邮箱: ', $email, '<br>'; }
点击 "运行实例" 按钮查看在线实例