Correction status:qualified
Teacher's comments:
mysqli面向对象的查询操作
主要通过store_result()来获取结果集,然后用bind_result()把结果集绑定在变量上,最后用fetch()来每次获取结果集中的一条数据,代码如下:
<?php /** *查询操作 */ //连接数据库 require 'connect.php'; $sql = "SELECT `staff_id`,`name`,`salary` FROM `staff` WHERE `salary`>?;"; //创建预处理对象 $stmt = $mysqli->stmt_init(); if ($stmt->prepare($sql)){//预处理对象的prepare方法 检测sql语句是否正确 //绑定参数 $stmt->bind_param('i',$salary); $salary = 5000; if ($stmt->execute()){var_dump($stmt->num_rows); //获取结果集并放到缓存区 $stmt->store_result(); //将结果集中的列绑定到变量上 $stmt->bind_result($id,$name,$salary); //判断结果集是否为空,不为空才遍历 if ($stmt->num_rows > 0){ //循环遍历结果集 //fetch()每次获取一条记录,指针下移 while ($stmt->fetch()){ echo '<p>id:'.$id.',姓名:'.$name.',工资:'.$salary; } }else{ die('当前表没有数据'); } }else{//执行阶段的错误 die($stmt->errno.':'.$stmt->error); } }else{ //返回sql出错信息 die($stmt->errno.':'.$stmt->error); } $stmt->close(); $mysqli->close();
点击 "运行实例" 按钮查看在线实例
pdo的优势
pdo是php数据对象,为其他数据库提供了一个统一的接口,也就是说可以操作所有的数据库,使用很方便。
<?php /** * pdo php数据对象, 是php操作所有数据库的抽象层,提供了一个统一的方法 */ //new PDO(数据源,用户名,密码) //数据源:设置数据库类型,以及服务器地址,默认的数据库 $dsn = 'mysql:host=127.0.0.1; dbname=php'; //用户名 $user = 'root'; //密码 $pass = 'root'; //实例化pdo,创建pdo对象看,并实现数据库连接 //语法结构try{}catch{} try{ $pdo = new PDO($dsn, $user, $pass); }catch(PDOException $e){ //pdoexception 数据类型 pdo异常 $e对象 die('connect error:'.$e->getMessage());//getMessage()获取pdo错误信息 } //关闭连接 //$pdo = null; //unset($pdo);
点击 "运行实例" 按钮查看在线实例
<?php /** * 新增记录 */ //1.连接数据库 创建pdo对象 $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //2.准备sql语句,占位符不用? ,用:字段名 $sql = "INSERT `user` SET `user_name`=:name, `email`=:email, `password`=sha1(:password);"; // 3.创建预处理对象 $stmt = $pdo->prepare($sql); //4.参数绑定 $data = ['name'=>'jack','email'=>'jack@php.cn','password'=>'root']; $stmt->bindParam(':name',$data['name'],PDO::PARAM_STR);//PDO::PARAM_STR指定参数类型为字符串 $stmt->bindParam(':email',$data['email'],PDO::PARAM_STR); $stmt->bindParam(':password',$data['password'],PDO::PARAM_STR); //5.执行语句 if ($stmt->execute()){//判断执行是否成功 //rowcount():返回受影响的记录数量 echo "<h3>成功添加了:{$stmt->rowCount()}条记录</h3>"; }else{ echo '<h3>添加失败</h3>'; print_r($stmt->errorInfo());//打印执行失败信息 die(); } $stmt = null; //关闭连接 $pdo = null;
点击 "运行实例" 按钮查看在线实例
<?php /** * update数据 */ //连接数据库 $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //准备sql语句 $sql = "UPDATE `user` SET `email`=:email WHERE `user_id`=:id;"; //预处理对象 $stmt = $pdo->prepare($sql); //传参执行 if($stmt->execute(['email'=>'333@qq.com','id'=>'134'])){ //是否修改成功 if($stmt->rowCount() > 0 ){//受影响记录是否>0 echo '<h3>成功修改了',$stmt->rowCount(),'条数据</h3>'; }else{ echo '无修改'; print_r($stmt->errorInfo());//返回修改错误信息 } }else{ print_r($stmt->errorInfo());//返回执行错误信息 die(); } //注销对象 unset($stmt,$pdo);
点击 "运行实例" 按钮查看在线实例
<?php /** * 删除数据 */ //连接数据库 $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //准备sql语句 $sql = "DELETE FROM `user` WHERE `user_id`>:id; "; //创建预处理对象 $stmt = $pdo->prepare($sql); //传参 执行语句 if($stmt->execute(['id'=>3])){//是否执行成功 //是否有数据删除 if ($stmt->rowCount()){ echo '<h3>成功删除了',$stmt->rowCount(),'条数据</h3>'; }else{ echo "无数据删除"; print_r($stmt->errorInfo()); } }else{ print_r($stmt->errorInfo()); die(); } unset($stmt,$pdo);
点击 "运行实例" 按钮查看在线实例
<?php /** * 查询数据 * */ //连接数据库 $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); $pdo->query('set names utf8;');//设置编码 //准备sql语句 $sql = "SELECT `staff_id`, `name`, `salary` FROM `staff` WHERE `salary`>:salary; "; //$sql = "SELECT `user_id`, `user_name` FROM `user` WHERE `user_id`>:id; "; //创建预处理对象 $stmt = $pdo->prepare($sql); //传参执行 if($stmt->execute(['salary'=>7000])){ if ($stmt->rowCount()>0){//受影响行数 // $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);//一次获取结果集 //// var_export($rows); // foreach ($rows as $v){//遍历结果集 // echo 'id:',$v['staff_id'],' ,name:',$v['name'],' ,salary:',$v['salary'],'<br>'; // } //pdo::fetch()每次获取一条记录,返回一个数组 while ($rows = $stmt->fetch(PDO::FETCH_ASSOC)){ echo 'id:',$rows['staff_id'],' ,name:',$rows['name'],' ,salary:',$rows['salary'],'<br>'; } }else{ echo '<h3>查询失败</h3>'; print_r($stmt->errorInfo()); } }else{ print_r($stmt->errorInfo()); die(); } //注销对象 unset($stmt,$pdo);
点击 "运行实例" 按钮查看在线实例
$stmt->rowCount()可以适用于增、删、改,这3个可以正确获取结果数量,查询则要使用select count()
和$stmt->fetchColumn()结合使用返回正确结果集个数。
总结:
pdo的操作基本流程都差不多,有以下步骤:
连接数据库,创建pdo连接对象
准备sql语句
创建sql预处理对象prepare()
参数绑定 bindParam()
执行sql语句execute()
获取结果集fetchAll()一次获取,fetch()一次获取一条,指针自动下移