Blogger Information
Blog 40
fans 1
comment 0
visits 31968
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PDO的增删改查操作0830
郭稳重啊的博客
Original
1575 people have browsed it

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()来获取结果集记录数量的正确方式。

Correction status:qualified

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