Blogger Information
Blog 48
fans 0
comment 0
visits 40645
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
0830-mysql数据库连接和pdo的增删改查
3期-Shawn的博客
Original
1851 people have browsed it

   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() 来取得返回的行数。这样应用程序才能正确执行。

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