• 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);
  • 相关阅读:
    linux ubuntu系统安装及卸载oracle xe11.2.0
    32位和64位的应用软件区别是什么
    在Ubuntu Server下安装Oracle XE
    虚拟化系列Citrix XenServer 6.1 安装与配置
    Oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子
    敏捷开发资料站推荐
    win7中竟然没有telnet.exe??
    Eclipse+Tomcat+Ant 小记
    为已有的web project项目加入maven支持,并使用myeclipse的插件.
    .NET性能优化数据库方面的总结
  • 原文地址:https://www.cnblogs.com/wodetian/p/5644279.html
Copyright © 2020-2023  润新知