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();        //提交
  • 相关阅读:
    使用 git 托管代码
    转载自网络大神
    i18n 国际化
    转自知乎大神---什么是 JS 原型链?
    转自知乎大神----JS 闭包是什么
    转自知乎大神----JS 的 new 到底是干什么的?
    转载自知乎大神---this 的值到底是什么?一次说清楚
    sql查看本机IP地址
    Python 编码规范(Google)
    Python在mysql中进行操作是十分容易和简洁的
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/9304004.html
Copyright © 2011-2022 走看看