• 跟着百度学PHP[14]-PDO的预处理语句1


    预处理语句有以下两个特点:

      1.效率高

      2.安全性好

    为什么说预处理语句效率高呢?

      预处理语句就好比一个模板,比如下面的一串插入语句:

    insert into admin(id,username,password) values(?,?,?);

    问号表示不固定的值,我们只需要输入值然后批量执行模板即可。

    为什么说其安全性好呢?

      因为其已经生成一个模板了,已经编译好了(PS:还没有执行)所以纵使黑客执行sql攻击命令也是无效的。因为已经编译了,输入再多的恶意sql语句也是徒劳。

    开始一个真实案例:

    <?php 
    try{
        $pdo = new pdo("mysql:host=localhost;port=3306;dbname=test","root","");
    }catch(PDOException $e){
        echo $e->getmessage();
    }
        $pdo->setattribute(PDO::ATTR_AUTOCOMMIT,0);
        echo "PDO对象创建成功.<br />";
    
    try{
    
        $sql = $pdo ->prepare("insert into users(gold,user,password) values(?,?,?)");//准备一条sql语句。prepare英译为预备。但未执行。
        //我们需要将三个问号分别绑定参数。
        $sql ->bindparam(1,$gold);//bind英译为绑定,param译参数。
        $sql ->bindparam(2,$user);
        $sql ->bindparam(3,$password);
    
        $gold = 9;
        $user = 'user';
        $password = 'awdohaw';
        $sql -> execute();//需要再插入那么直接再复制18行到20行代码即可。
    
        $gold = 10;
        $user = 'hacker-def';
        $password = 'while';
        $sql -> execute();//execute即执行该条sql命令。
    
    }catch(PDOException $e){
        echo $e->getmessage();
        exit;
    }
        echo "成功执行sql语句.<br />";
        $pdo->setattribute(PDO::ATTR_AUTOCOMMIT,1);
     ?>

    下图为执行后的效果:

     

    如果我们要插入更多的自然都是没有问题的。所以效率上面会好的很多。sqli也有预处理功能但是麻烦的多。

  • 相关阅读:
    Office Web Apps Server 2013与PDF(一)
    关于EF Unit of Work Repository的简单用法
    从3层开始
    使用ms owin 搭建oauth2 server
    让自己的程序支持livewriter
    angularjs 从外部改变controller内的数据
    vs2013 update 2 cordova(phonegap) 环境
    asp.net web api 跨域,带cookie
    c#与IronPython Clojure-clr的调用
    Mvc Moq HttpContext
  • 原文地址:https://www.cnblogs.com/xishaonian/p/6428744.html
Copyright © 2020-2023  润新知