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();        //提交
  • 相关阅读:
    hdu1848(sg函数打表)
    hdu1850(nim博弈)
    hdu1847(sg函数&yy)
    hdu2147(yy)
    poj2133(sg函数)
    Educational Codeforces Round 18D(完全二叉树中序遍历&lowbit)
    atcoder057D(组合数模板)
    euler证明
    04_过滤器Filter_04_Filter生命周期
    04_过滤器Filter_03_多个Filter的执行顺序
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/9304004.html
Copyright © 2011-2022 走看看