2. 问答: PDO 的优势
PDO是 PHP 数据 对象,是PHP操作所有数据库的抽象层,提供了一个统一的访问接口
PDO简单,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。
8.问答:获取结果集记录数量的正确方式是什么?
如果需要获取汇总数据需要使用以下方式fetchColumn,SQL使用COUNT(*)
<?php header("Content-Type: text/html; charset=utf-8"); //连接数据库 require 'db.php'; //预处理查询 $sql="SELECT `id`,`name`,`salary` FROM `user` WHERE `salary`>?;"; //创建预处理对象 $stmt=$mysqli->stmt_init(); if ($stmt->prepare($sql)){ //绑定参数 $stmt->bind_param('i',$salary); //设置参数 $salary=5000; } 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 { echo '当前表没有数据'; } } else { //返回SQL语句的出错信息 die($stmt->errno.'---'.$stmt->error); } //关闭预处理对象 $stmt->close(); //关闭连接 $mysqli->close(); ?>
点击 "运行实例" 按钮查看在线实例
<?php /** * PDO是PHP数据对象,是PHP操作所有数据库的抽象层,提供了一个统一的访问接口 * */ //$dsn:数据源,设置数据库类型,数据库服务器和默认数据库 $dsn='mysql:host=127.0.0.1;dbname=php'; $user='root'; $password='root'; //$dsn="sqlsrv:Server=127.0.0.1,1433;Database=PHP"; //$user='sa'; //$password=''; try{ $pdo=new PDO($dsn,$user,$password); //echo '<h2>连接成功</h2>'; } catch (PDOException $e) { die('Connect ERROR!:'.$e->getMessage()); } //关闭连接 $pdo=null; //unset($pdo);
点击 "运行实例" 按钮查看在线实例
<?php /** * 新增数据 */ //1-连接数据库 //$pdo=new PDO('sqlsrv:Server=127.0.0.1,1433;Database=PHP','sa','');//SQL连接方式 $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)"; //echo $stmt->queryString;die();//输出检测SQL语句 //3-创建预处理对象 $stmt=$pdo->prepare($sql); //4-设置参数 $data=['name'=>'何生','email'=>'he@bonsaii.com','password'=>'123456'];//定义数据组 //5-执行添加 $stmt->execute($data); echo '<h2>成功的添加了'.$stmt->rowCount().'条记录!</h2>'; //关闭pdo unset($pdo); //关闭连接 $pdo=null;
点击 "运行实例" 按钮查看在线实例
<?php /** *更新数据 */ //1-连接数据库 $pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //2-准备SQL语句,占位符不们不用?,用"命名占位符" $sql="UPDATE `user` SET `name`= :name , `email`=:email WHERE `id`=:id"; //3-创建预处理对象 $stmt=$pdo->prepare($sql); //4-绑定参数 //$data=['name'=>'he','email'=>'hh@php.com','id'=>140]; if ($stmt->execute(['name'=>'he','email'=>'hh@php.com','id'=>140])) { //返回受影响的行 echo '<h2>更新成功了:'.$stmt->rowCount().'行!</h2>'; } else{ echo '<h2>更新失败</h2>'; print_r($stmt->errorInfo()); die(); } //关闭pdo unset($pdo); //关闭连接 $pdo=null;
点击 "运行实例" 按钮查看在线实例
<?php /** * 删除数据 */ //1-连接数据库 $pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //2-准备SQL语句,占位符不们不用?,用"命名占位符" $sql="DELETE FROM `user` WHERE `id`=:id"; //3-创建预处理对象 $stmt=$pdo->prepare($sql); if ($stmt->execute(['id'=>32])) { //返回受影响的行 echo '<h2>删除成功了:'.$stmt->rowCount().'行!</h2>'; } else{ echo '<h2>删除失败</h2>'; print_r($stmt->errorInfo()); die(); } //关闭pdo unset($pdo); //关闭连接 $pdo=null;
点击 "运行实例" 按钮查看在线实例
<?php /** * 查询数据 */ //1-连接数据库 $pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //2-准备SQL语句,占位符不们不用?,用"命名占位符" $sql="SELECT `user`,`name`,`email` FROM `user` WHERE `id`<=:id"; //3-创建预处理对象 $stmt=$pdo->prepare($sql); if ($stmt->execute(['id'=>100])) { //返回数据 // // 一次性取出 // $rows=$stmt->fetchAll(); //// var_dump($rows); // foreach ($rows as $row) // { // echo 'user:'.$row['user'].'name:'.$row['name'].'email'.$row['email'].'<br>'; // } while ( $row=$stmt->fetch(PDO::FETCH_ASSOC)){ echo var_dump($row).'<br>'; } // $row=$stmt->fetch(PDO::FETCH_ASSOC);//PDO::FETCH_ASSOC只取关联部分,默认输是取关联和索引 // var_dump($row); echo '<h2>查询数据:'.$stmt->rowCount().'行!</h2>'; } else{ echo '<h2>查询失败</h2>'; print_r($stmt->errorInfo()); die(); } //关闭pdo unset($pdo); //关闭连接 $pdo=null;
点击 "运行实例" 按钮查看在线实例
<?php /** * 将结果集绑定到变量上 */ //1-连接数据库 $pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //2-准备SQL语句,占位符不们不用?,用"命名占位符" $sql="SELECT `user`,`name`,`email` FROM `user` WHERE `id`<=:id"; $stmt=$pdo->prepare($sql); $stmt->execute(['id'=>100]); //将结果集绑定到变量:列与变量绑定 $stmt->bindColumn('user',$user); $stmt->bindColumn('name',$name); $stmt->bindColumn('email',$email); //用列变量来遍历结果集:建议使用类常量,PDO::FETCH_BOUND while ($stmt->fetch(PDO::FETCH_BOUND)){ echo '<h4> 用户 :'.$user.' 名称: '.$name.' 邮箱: '.$email. '</h4>'; } //关闭pdo unset($pdo); //关闭连接 $pdo=null;
点击 "运行实例" 按钮查看在线实例
<?php /** * 查询数据的行数 */ //1-连接数据库 $pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //2-准备SQL语句,占位符不们不用?,用"命名占位符" //$sql="SELECT `user`,`name`,`email` FROM `user` WHERE `id`<=:id"; ////3-创建预处理对象 //$stmt=$pdo->prepare($sql); // // if ($stmt->execute(['id'=>100])) { //// echo $stmt->fetchColumn(1), '<br>';//获取第一行第一列的数据,默认不传值是0;如果指定2代表3列数据email, // } //如果需要获取汇总数据需要使用以下方式 $stmt=$pdo->prepare('SELECT COUNT(*) FROM `user` WHERE `id`<=:id'); $stmt->execute(['id'=>100]); echo '返回人数:'.$stmt->fetchColumn().'<hr>'; // //返回数据 // while ( $row=$stmt->fetch(PDO::FETCH_ASSOC)) // { // echo var_dump($row).'<br>'; // } // } //关闭pdo unset($pdo); //关闭连接 $pdo=null;
点击 "运行实例" 按钮查看在线实例
$pdo = new PDO('mysql:host=localhost;dbname=php','root','root');
$stmt = $pdo->prepare($sql);
PDOStatement 类
$stmt->bindColumn : 绑定一列到一个 PHP 变量
$stmt->bindParam — 绑定一个参数到指定的变量名
$stmt->bindValue — 把一个值绑定到一个参数
$stmt->closeCursor — 关闭游标,使语句能再次被执行。
$stmt->columnCount — 返回结果集中的列数
$stmt->debugDumpParams — 打印一条 SQL 预处理命令
$stmt->errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE
$stmt->errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息
$stmt->execute — 执行一条预处理语句
$stmt->fetch — 从结果集中获取下一行
$stmt->fetchAll — 返回一个包含结果集中所有行的数组
$stmt->fetchColumn — 从结果集中的下一行返回单独的一列。
$stmt->fetchObject — 获取下一行并作为一个对象返回。
$stmt->getAttribute — 检索一个语句属性
$stmt->getColumnMeta — 返回结果集中一列的元数据
$stmt->nextRowset — 在一个多行集语句句柄中推进到下一个行集
$stmt->rowCount — 返回受上一个 SQL 语句影响的行数
$stmt->setAttribute — 设置一个语句属性
$stmt->setFetchMode — 为语句设置默认的获取