• PDO预处理


    什么是预处理?

    成熟的数据库都支持预处理语句(Prepared Statements)的概念。

    它们是什么东西?你可以把它们想成是一种编译过的要执行的SQL语句模板,可以使用不同的变量参数定制它。

    预处理语句具有两个主要的优点:

    1 查询只需要被解析(或准备)一次,但可以使用相同或不同的参数执行多次。当查询准备好(Prepared)之后,数据库就会分析,编译并优化它要执行查询的计划。

    对于复杂查询来说,如果你要重复执行许多次有不同参数的但结构相同的查询,这个过程会占用大量的时间,使得你的应用变慢。

    通过使用一个预处理语句你就可以避免重复分析、编译、优化的环节。简单来说,预处理语句使用更少的资源,执行速度也就更快。

    2 传给预处理语句的参数不需要使用引号,底层驱动会为你处理这个。

    如果你的应用独占地使用预处理语句,你就可以确信没有SQL注入会发生。

    代码演示:

    <?php
    header('content-type:text/html; charset=utf-8');
    //实例化pdo对象
    $pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=test;', 'root', '888888');
    //通过query函数执行sql命令
    $pdo->query('set names utf8');
    
    //插入数据
    $sql    = "insert into persons (name,age) values (?, ?);";
    $preObj = $pdo->prepare($sql);
    $res    = $preObj->execute(array('小明', 22));
    var_dump($res);
    
    //删除数据
    $sql = "delete from persons where id = ?";
    $preObj = $pdo->prepare($sql);
    $res    = $preObj->execute(array(3));
    var_dump($res);
    
    //修改数据
    $sql = "update persons set name = ? where id = ?;";
    $preObj = $pdo->prepare($sql);
    $res    = $preObj->execute(array('lucy', 5));
    var_dump($res);
    //查询数据
    $sql = "select * from persons where age > ? order by id desc;";
    $preObj = $pdo->prepare($sql);
    $preObj->execute(array(20));
    $arr = $preObj->fetchAll(PDO::FETCH_ASSOC);
    /*
     * FETCH_BOTH      是默认的,可省,返回关联和索引。
     * FETCH_ASSOC     参数决定返回的只有关联数组。
     * PDO::FETCH_NUM  返回索引数组
     * PDO::FETCH_OBJ  返回由对象组成的二维数组
     */
    print_r($arr);
  • 相关阅读:
    python基础——返回函数
    python基础——sorted()函数
    python基础——filter函数
    python基础——map/reduce
    python基础——高阶函数
    python基础——迭代器
    python——生成器
    轻量级文本编辑器,Notepad最佳替代品:Notepad++
    python网络编程
    如何检测远程主机上的某个端口是否开启?
  • 原文地址:https://www.cnblogs.com/wodetian/p/5644279.html
Copyright © 2020-2023  润新知