可我浪费着我寒冷的年华

跟着百度学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也有预处理功能但是麻烦的多。

posted @ 2017-02-22 14:20  珍惜少年时  阅读(277)  评论(0编辑  收藏  举报
可我浪费着我寒冷的年华