0830-mysql数据库连接和pdo的增删改查

2018年09月03日 17:05:12阅读数:1668博客 / 3期-Shawn的博客 / 课程作业

   1.编程:MySQLi面向对象中的查询操作


  1. 实例

    1.编程:MySQLi面向对象中的查询操作
    <?php
    require 'mysqli/config.php';
    error_reporting(E_ALL ^E_WARNING);//报告E_WARNING之外的所有错误
    //简化: 将连接参数转为变量或数组
    $mysqli = new mysqli($db_host,$db_user,$db_pass,$db_name);
    //判断是否连接成功?
    if ($mysqli->connect_errno)
    {
        // 自定义错误提示信息
        die('连接错误'.$mysqli->connect_errno.': '. $mysqli->connect_error);
    }
    //echo '<h1>连接成功</h1>';
    
    //设置默认数据库
    $mysqli->select_db($db_name);
    
    //设置客1户端默认的字符编码集
    $mysqli->set_charset($db_charset);

    运行实例 »

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

    2. 问答:PDO的优势

    PDO可以跨平台使用,支持几乎所有的数据库类型;

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

    PDO是PHP官方的PECL库,兼容性稳定性更高;

    PDO支持更高级的DB特性操作


    3.编程:PDO连接数据库


  2. 实例

    <?php
    
    header("Content-Type: text/html; charset=UTF-8");
    
    // PDO 即PHP(P)数据(D)对象(O),是PHP操作所有数据库的抽象层,提供了一个统一的访问接口。
     
    
    // 数据源:设置数据库的类型,以及数据库服务器和默认的数据库
    $dsn = 'mysql:host=127.0.0.1; dbname=edu';
    //用户名
    $user = 'root';
    //密码
    $pass = 'root';
    //实例化PDO类,创建pdo对象,并完成了数据库的连接
    
    //将要执行的代码放入TRY块中,如果这些代码执行过程中某一条语句发生异常,则程序直接跳转到CATCH块中,由$e收集错误信息和显示.
    try {
    
        $pdo = new PDO($dsn, $user, $pass);
        //echo '<h2>连接成功</h2>';
    
    } catch (PDOException $e) {
        die('Connect ERROR! :'. $e->getMessage());
    }
    
    
    // 关闭连接  有下面2种方式都可以
    //$pdo = null;
    
    //unset($pdo);

    运行实例 »

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

    4. 编程:PDO新增数据


  3. 实例

    <?php
    //新增记录1
    
    header("Content-Type: text/html; charset=UTF-8");
    
    //连接数据库
    require 'ceshi-pdo1.php';
    
    //准备SQL语句,占位符我们不再用?,用"命名占位符"
    $sql = "INSERT `user` SET `name`= :name , `email`= :email, `password`= md5(:password)";
    
    //创建预处理对象
    $stmt = $pdo->prepare($sql);
    
    //绑定参数
    $data = ['name'=>'杨过','email'=>'yg@php.cn','password'=>'123'];
    $stmt->bindParam(':name',$data['name'],PDO::PARAM_STR);//PDO::PARAM_STR为字符串类型
    $stmt->bindParam(':email',$data['email'],PDO::PARAM_STR);
    $stmt->bindParam(':password',$data['password'],PDO::PARAM_STR);
    
    //执行操作
    if ($stmt->execute()) {
        // rowCount(): 返回受影响的记录数量
        echo '<h3>成功添加了'.$stmt->rowCount().'条记录</h3>';
    } else {
        echo '<h3>添加失败</h3>';
        print_r($stmt->errorInfo());
        exit();
    }
    //注销stmt对象
    $stmt = null;
    // 关闭连接
    $pdo = null;

    运行实例 »

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

  4. 实例

    <?php
    //新增记录2
    
    header("Content-Type: text/html; charset=UTF-8");
    
    //连接数据库
    require 'ceshi-pdo1.php';
    
    //准备SQL语句,占位符我们不再用?,用"命名占位符"
    $sql = "INSERT `user` SET `name`= :name,`email`= :email, `password`= md5(:password)";
    //创建预处理对象
    $stmt = $pdo->prepare($sql);
    
    //执行操作
    $stmt->execute(['name'=>'尹志平1','email'=>'yzp@php.cn','password'=>'123']);
    $stmt->execute(['name'=>'尹志平2','email'=>'yzp@php.cn','password'=>'123']);
    $stmt->execute(['name'=>'尹志平3','email'=>'yzp@php.cn','password'=>'123']);
    $stmt->execute(['name'=>'尹志平4','email'=>'yzp@php.cn','password'=>'123']);
    $stmt->execute(['name'=>'尹志平5','email'=>'yzp@php.cn','password'=>'123']);
    
    //注销stmt对象
    $stmt = null;
    // 关闭连接
    $pdo = null;

    运行实例 »

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

    5. 编程:PDO更新数据


  5. 实例

    <?php
    //更新记录
    
    header("Content-Type: text/html; charset=UTF-8");
    
    //连接数据库
    require 'ceshi-pdo1.php';
    
    //准备SQL语句,占位符我们不再用?,用"命名占位符"
    $sql = "UPDATE `user` SET `name`= :name,`email`= :email WHERE `id`= :id";
    
    //创建预处理对象
    $stmt = $pdo->prepare($sql);
    
    
    //执行操作
    if ($stmt->execute(['name'=>'小龙女','email'=>'xln@qq.com','id'=>4])) {
        // rowCount(): 返回受影响的记录数量
        echo '<h3>成功更新了'.$stmt->rowCount().'条记录</h3>';
    } else {
        echo '<h3>更新失败</h3>';
        print_r($stmt->errorInfo());
        exit();
    }
    
    //注销stmt对象
    $stmt = null;
    // 关闭连接
    $pdo = null;

    运行实例 »

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

    6. 编程:PDO删除数据

  6. 实例

    <?php
    //删除记录
    
    header("Content-Type: text/html; charset=UTF-8");
    
    //连接数据库
    require 'ceshi-pdo1.php';
    
    //准备SQL语句,占位符我们不再用?,用"命名占位符"
    $sql = "DELETE FROM `user`  WHERE `id`= :id";
    
    //创建预处理对象
    $stmt = $pdo->prepare($sql);
    
    
    //执行操作
    if ($stmt->execute(['id'=>4])) {
        // rowCount(): 返回受影响的记录数量
        echo '<h3>成功删除了'.$stmt->rowCount().'条记录</h3>';
    } else {
        echo '<h3>删除失败</h3>';
        print_r($stmt->errorInfo());
        exit();
    }
    
    //注销stmt对象
    $stmt = null;
    // 关闭连接
    $pdo = null;

    运行实例 »

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

    7. 编程:PDO查询数据


  7. 实例

    <?php
    //预处理查询
    
    header("Content-Type: text/html; charset=UTF-8");
    
    //连接数据库
    require 'ceshi-pdo1.php';
    
    //准备SQL语句,占位符我们不再用?,用"命名占位符"
    $sql = "SELECT `name`,`email` FROM `user`  WHERE `id`< :id";
    
    //创建预处理对象
    $stmt = $pdo->prepare($sql);
    
    
    //执行操作
    $stmt->execute(['id'=>3]);
    //一次性取出  fetchAll()这个函数一般在不确定数据量大小的情况下,不建议使用,因为会造成死机。
    //函数从结果集中取得所有行作为关联数组,或数字数组,或二者兼有。
    /*$rows = $stmt->fetchAll();
    foreach ($rows as $row) 
    {
     echo 'name: ',$row['name'],'------email: ',$row['email'],'<br>';
    }
    */
    
    while($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {
    echo var_export($row),'<br>';
    }
    
    //注销stmt对象
    $stmt = null;
    // 关闭连接
    $pdo = null;

    运行实例 »

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

  8. 实例

    <?php
    //预处理查询
    
    header("Content-Type: text/html; charset=UTF-8");
    
    //连接数据库
    require 'ceshi-pdo1.php';
    
    //准备SQL语句,占位符我们不再用?,用"命名占位符"
    $sql = "SELECT `name`,`email` FROM `user`  WHERE `id`< :id";
    
    //创建预处理对象
    $stmt = $pdo->prepare($sql);
    
    //执行操作
    $stmt->execute(['id'=>3]);
    
    //获取一行一列,无法获取同一行其它列
    echo $stmt->fetchColumn(0),'<br>';//为空就是第一列
    //指针自动下移,获取二行2列
    echo $stmt->fetchColumn(1),'<br>';
    
    echo '<hr>';
    
    $stmt = $pdo->prepare($sql);
    $stmt->execute(['id'=>5]);
    // 结果看上去是正确的,但是是有问题的,不要这样做,用下面的方法
    echo 'ID小于5的人数: '. $stmt->rowCount();
    
    echo '<hr>';
    
    $stmt = $pdo->prepare("select count(*) from user where id < :id");//SELECT COUNT(*) FROM table_name函数返回表中的记录数
    $stmt->execute(['id'=>5]);
    echo 'ID大于5的人数: '. $stmt->fetchColumn();
    //注销stmt对象
    $stmt = null;
    // 关闭连接
    $pdo = null;

    运行实例 »

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

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

    对于大多数数据库,PDOStatement::rowCount() 不能返回受一条 SELECT 语句影响的行数。正确的方法是,使用 PDO::query() 来发出一条和原打算中的SELECT语句有相同条件表达式的 SELECT COUNT(*) 语句,然后用 PDOStatement::fetchColumn() 来取得返回的行数。这样应用程序才能正确执行。

批改状态:合格

老师批语:

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 博主信息
    3期-Shawn的博客
    博文
    48
    粉丝
    0
    评论
    0
    访问量
    31919
    积分:1
    P豆:98