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();        //提交
  • 相关阅读:
    【java编程】使用System.getProperty方法,如何配置JVM系统属性
    【java多线程】CountDownLatch
    【java多线程】ConcurrentLinkedHashMap
    【java编程】ServiceLoader使用看这一篇就够了
    【JVM】java对象
    【git】Git常用命令
    centos7安装配置mysql5.7
    第十三章 redis-cluster原理
    《mysql技术内幕 InnoDB存储引擎(第二版)》阅读笔记
    第二章 BIO与NIO
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/9304004.html
Copyright © 2011-2022 走看看