1)编程:MySQLi面向对象中的查询操作
实例
<?php /** * 预处理查询操作 */ //连接数据库 require 'demo1.php'; //准备SQL语句 $sql = "SELECT `staff_id`,`name`,`salary` FROM `staff` WHERE `salary` < ? ;"; // 创建预处理对象 $stmt = $mysqli->stmt_init(); if ($stmt->prepare($sql)) { //绑定参数 $stmt->bind_param('i', $salary); //设置参数 $salary = 4000; 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支持多种数据库,而MySQLi只支持MySQL,一但你掌握了就你可以随心所欲的使用连接多种数据库。
3)编程:PDO 连接数据库
实例
<?php /** * PDO PHP数据对象,是PHP操作所有数据库的抽象层,提供了一个统一的访问接口 */ // 数据源:设置数据库的类型,以及数据库服务器和默认的数据库 $dsn = 'mysql:host=127.0.0.1; dbname=php'; //用户名 $user = 'root'; //密码 $pass = 'root'; //实例化PDO类,创建pdo对象,并完成了数据库的连接 try { $pdo = new PDO($dsn, $user, $pass); echo '<h2>连接成功</h2>'; } catch (PDOException $e) { die('Connect ERROR! :'. $e->getMessage()); } // 关闭连接 $pdo = null; unset($pdo);
运行实例 »
点击 "运行实例" 按钮查看在线实例
运行效果图:
4)编程:PDO新增数据
实例
<?php /** * 新增记录 */ //连接数据库 $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //准备SQL语句,占位符我们不再用?,用"命名占位符" $sql = "INSERT `user` SET `user_name`= :name , `email`= :email, `password`= sha1(:password)"; //创建预处理对象 $stmt = $pdo->prepare($sql); //绑定参数 $data = ['name'=>'关羽','email'=>'gy@php.cn','password'=>'123']; $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(); } $stmt = null; // 关闭连接 $pdo = null;
运行实例 »
点击 "运行实例" 按钮查看在线实例
运行效果图:
5)编程: PDO更新数据
实例
<?php /** * 更新记录 */ //连接数据库 $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); $stmt->execute(['email'=>'yzf@qq.com','id'=>10]); echo '<h3>成功更新了'.$stmt->rowCount().'条记录</h3>'; $stmt = null; // 关闭连接 $pdo = null;
运行实例 »
点击 "运行实例" 按钮查看在线实例
运行效果图:
6)编程: 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'=>10])) { // rowCount(): 返回受影响的记录数量 echo '<h3>成功删除了'.$stmt->rowCount().'条记录</h3>'; } else { echo '<h3>无删除</h3>'; print_r($stmt->errorInfo()); exit(); } $stmt = null; // 关闭连接 $pdo = null;
运行实例 »
点击 "运行实例" 按钮查看在线实例
运行效果图:
7)编程:PDO查询数据
实例
<?php /** * PDO 预处理查询 */ //连接数据库 $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //准备SQL语句,占位符我们不再用?,用"命名占位符" $sql = "SELECT `user_name`,`email` FROM `user` WHERE `user_id` < :id"; //创建预处理对象 $stmt = $pdo->prepare($sql); //执行查询 $stmt->execute(['id'=>5]); //将结果集中的列绑定到变量上 $stmt->bindColumn('user_name', $name); $stmt->bindColumn('email', $email); //用列变量来遍历结果集 while ($stmt->fetch(PDO::FETCH_BOUND)) { echo '姓名: '.$name.', 邮箱: '.$email.'<br>'; } $stmt = null; // 关闭连接 $pdo = null;
运行实例 »
点击 "运行实例" 按钮查看在线实例
运行效果图:
8)问答:获取结果集记录数量的正确方式是什么?
答:设一个计数器,每次操作一次数据库都统计一次。
总结:PDO的好处是对与编程者来说实际使用的数据库是透明的,便于移植代码,虽然这样的事情不是经常发生。