博客列表 >PDO的增删改查操作0830

PDO的增删改查操作0830

郭稳重啊的博客
郭稳重啊的博客原创
2018年09月07日 12:39:281572浏览

0830作业


实例

<?php

echo '<h3> 0830作业第一题:mysqli预处理查询操作 </h3>';
echo '<h5> 查询:年龄大于25,工资大于8000</h5>';

//连接数据库
require 'demo1.php';

//准备SQL语句
$sql = "SELECT `id`,`name`,`age` ,`salary`  FROM `staff` WHERE `age` > ? && `salary` > ?;";

// 创建预处理对象,mysqli_stmt_init() 函数初始化声明并返回 mysqli_stmt_prepare() 使用的对象。
$stmt = $mysqli->stmt_init();

if ($stmt->prepare($sql)) {
    //绑定参数,绑定一个参数到指定的变量名,将用户数组与sql语句的占位符进行绑定
    $stmt->bind_param('ii', $age,$salary);

    //设置参数
    $age =25;
    $salary=8000;
    if ($stmt->execute()) {

        //获取结果集并放到缓存区
        $stmt->store_result();

        //将结果集中的列绑定到变量上
        $stmt->bind_result($id,$name,$age, $salary);

        //结果集是否不为空,只有不为空的时候才遍历
        if ($stmt->num_rows > 0) {
            // 循环遍历结果集,fetch()每次获取一条记录,并将指针自动下移
            while ($stmt->fetch())
            {
                echo '<p>id:'.$id.'---姓名:'  .$name.'---年龄:'  .$age.'---工资:'  .$salary.'</p>'.'<hr>';
            }
        }
        else
        {
            exit('<p>当前表中没有数据</p>');
        }

        // 释放结果集
        $stmt->free_result();
    }
    else
    {
        //返回执行阶段的出错信息,$stmt->errno出错代码,出错描述
        exit($stmt->errno. ': ' . $stmt->error);
    }
}
else
{
    //返回sql语句检测阶段的出错信息
    exit($stmt->errno. ': ' . $stmt->error);
}


//注销stmt对象
$stmt->close();

//关闭连接
$mysqli->close();

运行实例 »

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


T%3EJ~NB74((610$LM7)9{P.png

2.问答:PDO的优势?

 PDO有非常多的操作却是MySQL扩展库所不具备的:
 1、PDO真正的以底层实现的统一接口数库操作接口,不管后端使用的是何种数据库,
    如果代码封装好了以后,应用层调用基本上差不多的,当后端数据库更换了以后,应用层代码基本不用修改.
 2、PDO支持更高级的DB特性操作,如:存储过程的调度等,mysql原生库是不支持的.
 3、PDO是PHP官方的PECL库,兼容性稳定性必然要高于MySQL Extension,可以直接使用 pecl upgrade pdo 命令升级.
 4、PDO可以防止SQL注入,确保数据库更加安全使用语句预处理将帮助你免于SQL注入攻击。

    总之就是,PDO应用的比mysqli较广泛,使用起来较方便,PDO可以使用相同的sql语句执行不同的数据库,
 而mysqli只能执行mysql一种数据库。并且PDO有预处理,一条预处理语句是一条预编译的 SQL 语句,它可以被使用多次,
 每次只需将数据传至服务器。而且可以对使用占位符的数据进行安全处理,防止SQL注入攻击。

实例

<?php
/**
 * PDO PHP数据对象,是PHP操作所有数据库的抽象层,提供了一个统一的访问接口
 */
echo '<h4> 0830作业第3题:编程:PDO 连接数据库 </h4>';
// 数据源:设置数据库的类型,以及数据库服务器和默认的数据库
$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);

运行实例 »

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

实例

<?php
/**
 * 新增记录
 */
echo '<h4> 0830作业第4题:编程:PDO新增数据 </h4>';
//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.执行添加
$stmt->execute(['name'=>'周芷若1','email'=>'zzr@php.cn','password'=>'66896']);
$stmt->execute(['name'=>'周芷若2','email'=>'123@php.cn','password'=>'66698']);
$stmt->execute(['name'=>'周芷若3','email'=>'345@php.cn','password'=>'80666']);
$stmt->execute(['name'=>'周芷若4','email'=>'789@php.cn','password'=>'69780']);
$stmt->execute(['name'=>'周芷若5','email'=>'r77@php.cn','password'=>'12676']);
echo '<h3>成功添加了'.$stmt->rowCount().'条记录</h3>';

运行实例 »

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

实例

<?php
echo '<h4> 0830作业第5题:编程:PDO更新数据 </h4>';
//连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');

//准备SQL语句,占位符我们不再用?,用"命名占位符"
$sql = "UPDATE `user` SET `name`= :name ,`email`= :email WHERE `id` = :id";

//创建预处理对象
$stmt = $pdo->prepare($sql);

$stmt->execute(['name'=>'赵敏','email'=>'888@163.com','id'=>90]);
    echo '<h3>成功更新了'.$stmt->rowCount().'条记录</h3>';


$stmt = null;
// 关闭连接
$pdo = null;

运行实例 »

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

实例

<?php
/**
 * 删除记录
 */
echo '<h4> 0830作业第6题:编程:PDO删除数据 </h4>';
//连接数据库
$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'=>2]))
{
    // rowCount(): 返回受影响的记录数量
    echo '<h3>成功删除了'.$stmt->rowCount().'条记录</h3>';
}
else
{
    echo '<h3>无删除</h3>';
    // errorInfo() 返回一个关于上一次语句句柄执行操作的错误信息的数组
    // 0 SQLSTATE 错误码, 1具体驱动错误码, 2具体驱动错误信息。
    print_r($stmt->errorInfo());
    exit();
}

$stmt = null;
// 关闭连接
$pdo = null;

运行实例 »

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

E_VN)I9RPP60N0$5[EWP`98.png

实例

<?php

echo '<h4> 0830作业第7题:编程:PDO查询数据 </h4>';
//连接数据库
$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);

//执行查询
$stmt->execute(['id'=>88]);

// 一次性取出
//$rows = $stmt->fetchAll();
//foreach ($rows as $row) {
//    echo 'name: ',$row['name'],',   email: ',$row['email'],'<br>';
//}

//因为fetch()取出来的数据,包括索引数组和关联数组
//PDO::FETCH_ASSOC:返回一个索引为结果集列名的数组,就是结果只显示关联数组部分
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo var_export($row),'<br>';
}

运行实例 »

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

HHI0{OSU_HZJ@PZW$FHWTMH.png

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

    方式1、使用count()来计算查询结果集转换为数组后的单元数再用fetchColumn()来获取结果集
    方式2、rowCount()是返回SQL语句执行后影响的行数,结果看上去是正确的,但是是有问题的
    总之,方式1 使用count()再用fetchColumn()来获取结果集记录数量的正确方式。

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