zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    IE11和传统asp.net的兼容问题
    时区和夏令时
    GTA项目 三, 使用 bootstrap table展示界面,使得data和UI分离
    GTA项目 二, JSON接口开放跨域访问
    GTA项目 一, 包装外部WebService
    DNS域名解析
    CRM 迁移服务器备忘
    CentOS6.5 安装HAProxy 1.5.20
    Custom IFormatProvider
    数据分区考虑
  • 原文地址:https://www.cnblogs.com/wodetian/p/5644279.html
Copyright © 2011-2022 走看看