zoukankan      html  css  js  c++  java
  • 跟着百度学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也有预处理功能但是麻烦的多。

  • 相关阅读:
    输出菱形
    for语句输出三角形
    阶乘倒数的和
    变量赋值判断奇偶
    928作业
    各种主流数据库的比较(所以说我觉得Oracle这个keng?入的不错?)
    Oracle创建表
    (转载)全球唯一标识GUID
    (转载)Java基础知识总结
    两天以来对plsqldev操作的记忆
  • 原文地址:https://www.cnblogs.com/xishaonian/p/6428744.html
Copyright © 2011-2022 走看看