zoukankan      html  css  js  c++  java
  • Mysql 预查询处理 事务机制

    预处理

    PDO支持sql预处理功能,可以有效的防止sql注入的问题

    例如:

    以下操作会导致数据表中所有数据删除

    $host = 'localhost';
    $port = 3306;
    $dbname = 'pdo';
    $user = 'root';
    $pass = '123';
    $dsn = "mysql:host={$host};port={$port};dbname={$dbname}";
    try {
        $mysql = new PDO($dsn,$user,$pass);
    } catch (Exception $e) {
        echo 'connect failure !';
        die();
    }
    
    $id = '1 or 1=1';    //ID模拟从前端获取的删除数据的ID
    $sql = "DELETE FROM `books` WHERE id={$id}";
    $mysql->exec($sql);

    这是常见的一种sql注入的方式

    采用pdo提供的预处理的方法,可以避免这一点

    $id = '1 or 1=1';    //ID模拟从前端获取的删除数据的ID
    $sql = "DELETE FROM `books` WHERE id = :id";    //使用占位符代替用户输入的id    
    $sth = $mysql->prepare($sql);        //绑定参数
    $sth->execute(array('id'=>$id));

    语法:

    $mysql->prepare($sql);  //生成预处理语句  返回PDOStatement对象
    $sth->execute(array(参数))   //执行预处理语句   返回布尔值
    

    查询

    $sql = 'SELECT * FROM `books` WHERE id < 100';
    $res = $mysql->query($sql);   //执行查询  返回PDOStatement对象
    $all = $res->fetchAll();     //返回结果集中所有的行
    $row = $res->fetch();        //返回结果集中下一行,同时指针向前移动一位
    foreach ($all as $key => $value) {
        var_dump($value);
    }

    扩展:TP中预查询

    $resultSet = Db::query('insert into user values(:name,:age,:sex)', ['张三','10','1']);

    事务机制

    $mysql->beginTransaction();    //开启事务机制
    $sql = "UPDATE `books` SET name='mysql and PHP...' WHERE id < 100 ";
    $mysql->exec($sql);
    //根据业务执行以下语句
    $mysql->rollBack();        //回滚
    $mysql->commit();        //提交
  • 相关阅读:
    python3获取文件夹大小
    git master分支被污染,dev是最新稳定的
    优化经验杂记
    kong
    prometheus
    C# 线程执行带参方法的几种写法(ThreadStart,delegate (),()=>)
    MySql字符集utf8mb4和utf8区别
    程序员必备的一些数学基础知识
    hbase统计表的行数的三种方法
    Flink实时计算pv、uv的几种方法
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/9304004.html
Copyright © 2011-2022 走看看