Blogger Information
Blog 28
fans 0
comment 0
visits 26727
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PDO的优势与增删改查作业
YHF的博客
Original
897 people have browsed it

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; 当然也可以不写,不写的话关闭脚本会自动注销关闭

Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post