博客列表 >PDO的优势与增删改查作业

PDO的优势与增删改查作业

YHF的博客
YHF的博客原创
2018年09月02日 11:50:35900浏览

mysqli面向对象的查询操作

实例

<?php
/**
 * Created by PhpStorm.
 * User: 714326675
 * Date: 2018/9/1
 * Time: 15:07
 */
//mysqli数据库预处理查询
//设置数据库连接需要的信息
$db=['host'=>'127.0.0.1','username'=>'root','password'=>'','dbname'=>'test'];
//报告除了警告外的所有错误
error_reporting(E_ALL ^E_WARNING);
//连接数据库
$mysqli = new mysqli($db['host'],$db['username'],$db['password'],$db['dbname']);
//判断连接结果
if($mysqli->connect_errno){
    die('连接错误'.$mysqli->connect_errno.':'.$mysqli->connect_error);
}
//设置字符集
$mysqli->set_charset('utf8');
//sql语句
$sql="SELECT `id`,`name`,`salary` FROM `user` WHERE `salary`>?";
//初始化声明并返回 mysqli_stmt_prepare() 使用的对象。
$stmt=$mysqli->stmt_init();
//准备执行一个 SQL 语句
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 'id====>',$id,'|姓名====>',$name,'|工资====>',$salary,'<br>';
                    }
                }else{
                    die('无数据');
                }
            //释放结果集
            $stmt->free_result();
        }else{
            //返回执行阶段的出错信息
            exit($stmt->errno.':'.$stmt->error);
    }

}else{
    //返回sql检测阶段的出错信息
    exit($stmt->errno.':'.$stmt->error);
}
//注销stmt对象
$stmt->close();
//关闭连接
$mysqli->close();

运行实例 »

点击 "运行实例" 按钮查看在线实例

mysqli_select.jpg

问答:PDO的优势?

PDO有非常多的操作却是MySQL扩展库所不具备的:

1:PDO真正的以底层实现的统一接口数库操作接口,不管后端使用的是何种数据库,如果代码封装好了以后,应用层调用基本上差不多的,当后端数据库更换了以后,应用层代码基本不用修改.

2:PDO支持更高级的DB特性操作,如:存储过程的调度等,mysql原生库是不支持的.

3:PDO是PHP官方的PECL库,兼容性稳定性必然要高于MySQL Extension,可以直接使用 pecl upgrade pdo 命令升级.

4:PDO可以防止SQL注入,确保数据库更加安全

三.PDO连接数据库

实例

<?php
/**
 * Created by PhpStorm.
 * User: 714326675
 * Date: 2018/9/1
 * Time: 19:07
 */
//PDO PHP数据对象,是PHP操作所有数据库的抽象层,提供了一个统一的访问接口
//连接pdo

//设置数据源
$dsn='mysql:host=127.0.0.1;dbname=test';
$user='root';
$passwd='';
//实例化PDO类,创建PDO对象,并完成对数据库的连接
try{
    $pdo = new PDO($dsn,$user,$passwd);
    echo '<h2>连接成功啦</h2>';
}catch (PDOException $e){
    exit('connect ERROR!:'.$e->getMessage());
}
//关闭连接方式
//方式1
//$pdo=null;
//方式2
//unset($pdo);

运行实例 »

点击 "运行实例" 按钮查看在线实例

connect.jpg

四.数据库新增数据

实例

<?php
/**
 * PDO
 * 数据的录入
 */
//设置数据源
$dsn='mysql:host=127.0.0.1;dbname=test';
//设置用户名
$user='root';
//设置密码
$passwd='';
//连接数据库,新建pdo
$pdo=new PDO($dsn,$user,$passwd);
//sql语句
$sql="INSERT `user` SET `name`=:name,`salary`=:salary,`email`=:email,`passwd`=sha1(:passwd); ";
//创建预处理对象
$stmt=$pdo->prepare($sql);
//设置需要录入的数据信息
$data=['name'=>'赵大','salary'=>12435,'email'=>'zd@qq.com','passwd'=>'abc'];
//绑定参数
$stmt->bindParam(':name',$data['name'],PDO::PARAM_STR);
$stmt->bindparam(':salary',$data['salary'],PDO::PARAM_INT);
$stmt->bindParam(':email',$data['email'],2);
$stmt->bindParam(':passwd',$data['passwd'],2);
//执行语句与判断执行结果
if($stmt->execute()){
    echo '<h3>成功添加了',$stmt->rowCount(),'条记录</h3>';
}else{
    echo '<h3>添加失败</h3>>';
    print_r($stmt->errorInfo());
    exit();
}
//关闭
$stmt=null;
//关闭连接
$pdo=null;

运行实例 »

点击 "运行实例" 按钮查看在线实例

insert.jpg

五.PDO更新数据

实例

<?php
/**
 * 更新数据
 */
//连接数据库
$pdo= new PDO('mysql:host=127.0.0.1;dbname=test','root','');
//sql语句
$sql="UPDATE `user` SET `salary`=:salary WHERE `id`=:id;";
//创建预处理对象
$stmt=$pdo->prepare($sql);
//执行
$stmt->execute(['salary'=>3,'id'=>5]);
//输出执行成功记录行数
echo '<h3>成功更新了',$stmt->rowCount(),'条数据</h3>';
//关闭$stmt
$stmt=null;
//关闭连接
$pdo=null;

运行实例 »

点击 "运行实例" 按钮查看在线实例

update.jpg

六.PDO删除数据

实例

<?php
/**
 * 删除记录
 */
$pdo= new PDO('mysql:host=127.0.0.1;dbname=test','root','');
//sql语句
$sql="DELETE FROM `user` WHERE `id`=:id;";
//创建预处理对象
$stmt=$pdo->prepare($sql);
//执行
$stmt->execute(['id'=>4]);
//输出执行成功记录行数
echo '<h3>成功删除了',$stmt->rowCount(),'条数据</h3>';
//关闭$stmt
$stmt=null;
//关闭连接
$pdo=null;

运行实例 »

点击 "运行实例" 按钮查看在线实例

delete.jpg

七.PDO查询数据

实例

<?php
/**
 * Created by PhpStorm.
 * User: 714326675
 * Date: 2018/9/1
 * Time: 22:34
 */
$pdo= new PDO('mysql:host=127.0.0.1;dbname=test','root','');
//sql语句
//$sql="SELECT * FROM `user` WHERE `id`<>:id;";//不等于
//$sql="SELECT * FROM `user` WHERE `id`<=:id;";//小于等于
//$sql="SELECT * FROM `user` WHERE `id`=:id;";//等于
//$sql="SELECT * FROM `user` WHERE `id`>:id;";//大于
$sql="SELECT * FROM `user` WHERE `id`<:id;";//小于
//创建预处理对象
$stmt=$pdo->prepare($sql);
//执行
$stmt->execute(['id'=>5]);
//输出执行成功记录行数
echo '<h3>成功查询了',$stmt->rowCount(),'条数据</h3>';
//遍历数据
while($row=$stmt->fetch(PDO::FETCH_ASSOC)){
    echo var_export($row),'<br>';
}
//关闭$stmt
$stmt=null;
//关闭连接
$pdo=null;

运行实例 »

点击 "运行实例" 按钮查看在线实例

pdo_select1.jpg

实例

<?php
/**
 * Created by PhpStorm.
 * User: 714326675
 * Date: 2018/9/2
 * Time: 10:39
 */
//连接数据库
$pdo=new PDO('mysql:host=127.0.0.1;dbname=test','root','');
//sql语句
$sql="SELECT `id`AS 序号,`name` AS 名字,`salary` AS 工资 FROM `user` WHERE `id` < :id;";
//创建预处理
$stmt=$pdo->prepare($sql);
//设置参数
$data=['id'=>56];
//绑定参数:可省略
//$stmt->bindParam(':salary',$data['id'],PDO::PARAM_INT);
//执行
$stmt->execute($data);

//将结果集中的列绑定到变量上
//$stmt->bindColumn('序号',$id);
//$stmt->bindColumn('名字',$name);
//$stmt->bindColumn('工资',$salary);
//用列变量遍历结果集
//while ($stmt->fetch(PDO::FETCH_BOUND)) {
//    echo 'id:',$id,'姓名: ',$name, ',  工资: ', $salary, '<br>';
//}
//遍历结果集
//while($row=$stmt->fetch(PDO::FETCH_ASSOC)){
//   echo var_export($row),'<br>';
//}


//获取一行一列,无法获取同一行其它列
//echo $stmt->fetchColumn(0),'<br>';
//指针自动下移,获取二行2列
//echo $stmt->fetchColumn(1),'<br>';
$stmt=$pdo->prepare("SELECT * FROM `user` WHERE `salary` > :salary;");
$stmt->execute(['salary'=>10000]);
//结果看起来正确,但其实是有问题的,不要这样做
echo '工资大于10000的人数',$stmt->rowCount();
echo '<hr>';

//这才是正确方法
//count(*)
//$stmt->fetchColumn()
$stmt=$pdo->prepare("SELECT count(*) FROM `user` WHERE `salary` > :salary;");
$stmt->execute(['salary'=>10000]);
echo '工资大于10000的人数',$stmt->fetchColumn();

运行实例 »

点击 "运行实例" 按钮查看在线实例

pdo_select1-2.jpg

实例

<?php
/**
 * Created by PhpStorm.
 * User: 714326675
 * Date: 2018/9/2
 * Time: 11:05
 */
//连接数据库
$pdo=new PDO('mysql:host=127.0.0.1;dbname=test','root','');
//sql语句
$sql="SELECT `name`,`email`  FROM `user` WHERE `id` < :id;";
//创建预处理
$stmt=$pdo->prepare($sql);
//执行
$stmt->execute(['id'=>5]);
//将结果列绑定到变量中
$stmt->bindColumn('name',$name);
$stmt->bindColumn('email',$email);
//遍历结果集中的数据
while($stmt->fetch(PDO::FETCH_ASSOC)){
    echo '姓名:',$name,',邮箱:',$email,'<hr>';

}
//注销
$stmt=null;
//关闭连接
$pdo=null;

运行实例 »

点击 "运行实例" 按钮查看在线实例

八.问答: 获取结果集记录数量的正确方式是什么?

    查询中使用count(*) 把结果整合成一列
    然后使用$stmt->fetchColumn();获取记录数量

九.总结:

  1. PDO中的dsn为数据源,格式:'mysql:host=127.0.0.1;dbname=test'

  2. 连接数据库为new PDO(参数dsn,参数username,参数passwd)

  3. 还需要一条sql语句

  4. 需要创建预处理对象$stmt=$pdo->prepare($sql);

  5. 再弄参数$data=['name'=>'郭靖'] 参数弄成数组

  6. 参数绑定,这部分其实可以省略:$stmt->bindParam(':name',$data['name'],PDO::PARAM_STR);

  7. 执行:$stmt->execute();,如果第六部分省略就要这样写:$stmt->exexute($data);

  8. 执行完后需要注销$stmt和关闭$pdo:$stmt=null;$pdo=null; 当然也可以不写,不写的话关闭脚本会自动注销关闭

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议