MySQLi面向对象中的查询操作
实例
<?php /** * 预处理查询操作 */ //连接数据库 require 'demo1.php'; //准备SQL语句 $sql = "SELECT `id`,`name`,`salary` FROM `staff` WHERE `salary` > ?;"; //创建预处理对象 $stmt -> $mysqli->stmt_init(); // if($stmt->prepare($sql)){ //绑定参数 $stmt->bind_param('i',$salary); //设置参数 $salary = 6000; if($stmt->execute()){ //获取结果集并放到缓存区 $stmt->store_result(); //结果集中的列绑定到变量 $stmt->bind_result($id,$name,$salary); //结果集是否为空,不为空才遍历 if($stmt->num_rows> 0){ //循环遍历结果集 //fetch()每次获取一条记录,并将指针自动下移 while($stmt->fetch()){ echo '<p>id:'.$id.'---姓名:'.$name.'---工资:'.$salary.'</p>'; } }else{ exit("<p>当前表中没有数据</p>"); } $stmt->free_result(); }else{ //返回执行阶段的出错信息 exit($stmt->errno.":".$stmt->error); } }else{ //返回sql语句检测阶段的出错信息 exit($stmt->errno.":".$stmt->error); } //注销stmt对象 $stmt->close(); //关闭连接 $mysqli->close();
运行实例 »点击 "运行实例" 按钮查看在线实例
---------------------------------------
2.PDO 的优势
实例
PDO真正的以底层实现的统一接口数库操作接口,不管后端使用的是何种数据库, 如果代码封装好了以后,应用层调用基本上差不多的, 当后端数据库更换了以后,应用层代码基本不用修改. PDO可以防止SQL注入,确保数据库更加安全
运行实例 »
点击 "运行实例" 按钮查看在线实例
3连接数据库
实例
<?php /** * 新增记录 */ //连接数据库 $pdo = NEW PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //准备SQL语句,占位符不用? 用'命名占位符' $sql = "INSERT `user` SET `name` =:name , `email` = :email , `password` = sha1(:password)"; //创建预处理对象 $stmt = $pdo->prepare($sql); //绑定参数 $data = ['name' => '张三', 'email' => 'zhangsam@qq.com' ,'password' => '123456']; $stmt -> bindParam('name',$data['name'],PDO::PARAM_STR); $stmt -> bindParam('email',$data['email'],PDO::PARAM_STR); $stmt -> bindParam('password',$data['password'],PDO::PARAM_STR); if($stmt->execute()){ //rowCount():返回受影响的记录数量 echo '<h3>成功添加了'.$stmt->rowCount().'条记录</h3>'; }else{ echo '<h3>添加失败</h3>'; print_r($stmt->errorInfo());//返回打印出错误信息 exit(); } //关闭连接 $pdo=null;
运行实例 »
点击 "运行实例" 按钮查看在线实例
4.新增数据
实例
<?php /** * 新增记录 */ //1连接数据库 $pdo = NEW PDO('mysql:host=127.0.0.1;dbname=php','root','root'); /* //2准备SQL语句,占位符不用? 用'命名占位符' $sql = "INSERT `user` SET `name` =:name , `email` = :email , `password` = sha1(:password)"; //3创建预处理对象 $stmt = $pdo->prepare($sql); //4设置参数 $data = ['name' => '王五', 'email' => 'wangwu@qq.com' ,'password' => '12345678']; //5执行参数 $stmt->execute($data); */ //另一种写法 直接执行添加 $stmt = $pdo->prepare("INSERT `user` SET `name` =:name , `email` = :email , `password` = sha1(:password)"); $stmt->execute(['name' => '王五', 'email' => 'wangwu@qq.com' ,'password' => '12345678']); echo '<h3>成功添加了'.$stmt->rowCount().'条记录</h3>'; // echo '<h3>添加失败</h3>'; // print_r($stmt->errorInfo());//返回打印出错误信息 // exit(); //关闭连接 $pdo=null;
运行实例 »
点击 "运行实例" 按钮查看在线实例
5.更新数据
实例
<?php /** * 更新记录 */ //连接数据库 $pdo = NEW PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //准备SQL语句,占位符不用? 用'命名占位符' $sql = "UPDATE `user` SET `email` =:email WHERE `id`=:id"; //创建预处理对象 $stmt = $pdo->prepare($sql); //执行查询 if($stmt->execute(['email' => 'lisi@163.com','id' => 4])){ //rowCount():返回受影响的记录数量 echo '<h3>成功更新了'.$stmt->rowCount().'条记录</h3>'; }else{ echo '<h3>更新失败</h3>'; print_r($stmt->errorInfo());//返回打印出错误信息 exit(); } //关闭连接 $pdo=null;
运行实例 »
点击 "运行实例" 按钮查看在线实例
6.删除数据
实例
<?php /** * 删除记录 */ //连接数据库 $pdo = NEW PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //准备SQL语句,占位符不用? 用'命名占位符' $sql = "DELETE FROM `user` WHERE `id`=:id"; //创建预处理对象 $stmt = $pdo->prepare($sql); //执行查询 if($stmt->execute(['id' => 3])){ //rowCount():返回受影响的记录数量 echo '<h3>成功删除了'.$stmt->rowCount().'条记录</h3>'; }else{ echo '<h3>删除失败</h3>'; print_r($stmt->errorInfo());//返回打印出错误信息 exit(); } //关闭连接 $pdo=null;
运行实例 »
点击 "运行实例" 按钮查看在线实例
7.删除数据
实例
<?php /** * 查询记录 */ //连接数据库 $pdo = NEW PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //准备SQL语句,占位符不用? 用'命名占位符' $sql = "SELECT `name`,`email` FROM `user` WHERE `id` > :id"; //创建预处理对象 $stmt = $pdo->prepare($sql); var_dump($stmt); //执行查询 $stmt->execute(['id' => 1]); //一次性取出---问题:如果一次性取出太多,内存会爆,不建议使用,除非是少量数据 //$rows = $stmt->fecthAll(); //foreach($rows as $value ){ // echo 'name:',$rows['name'],',email:',$rows['email'],'<br>'; //} while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ echo var_export($row),'<br>'; } //关闭连接 $pdo=null;
运行实例 »
点击 "运行实例" 按钮查看在线实例
8 获取结果集记录数量的正确方式是什么?
用COUNT(*)获取结果集,用$PDO->fetchColumn()取出结果集记录数量