PHP使用PDO预处理

1.什么是预处理

  预处理是指将SQL语句的编译与实施分离,它平常用与实施多条相似度很高的SQL语句(参数不一样)。有点是实施效用跟高,幸免SQL注入也更安全。

2.非预处理进程

  如果数据库中有一张结构如图

  图片 1

  将来咱们向表中插入三条条记下,不适用预处理的做法应该是如此的

 1 <?php
 2     $dsn="mysql:host=127.0.0.1;dbname=example";
 3     $user="root";
 4     $password='';
 5     try
 6     {
 7         $pdo=new PDO($dsn,$user,$password);
 8         $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
 9 
10         $pdo->exec("INSERT INTO student VALUES(null,'one',18,'1111111')");
11         $pdo->exec("INSERT INTO student VALUES(null,'two',19,'2222222')");
12         $pdo->exec("INSERT INTO student VALUES(null,'three',20,'3333333')");
13     }
14     catch(PDOException $e)
15     {
16         echo $e->getMessage();
17     }    
18 ?>

  在实施数据库操作时经过是这么的:

   编译10行SQL语句–>执行10行语句–>编译11行SQL语句–>执行11行语句–>编译12行SQL语句–>执行12行语句。

  不过观看可以窥见那三条语句的相似度是不行高的,它们之间的例外仅仅是传递的参数不相同而已。那么数据库执行操作时再一次编译数十四次平等的SQL语句是特别花费能源且不须要的。

3.PDO预处理

  编译与执行分离

    PDO提需求大家一个措施,可以将SQL语句送到数据库进行编译,而不执行。参数部分能够用占位符代替。

1   $pdo->prepare("INSERT INTO stduent VALUES (null,:name,:age,:address)");//关联占位,必须以:开头接
2    $pdo->prepare("INSERT INTO stduent VALUES (null,?,?,?)");//索引占位

     该办法再次回到一个PDOStatement对象,接下去倘诺要执行就要调用PDOStatement里的格局

   $pdostatement->execute();

   传入参数

     在履行时,大家需求向编译好的SQL语句传递参数,以涉及数组或许索引数组的章程

1   $pdostatement->execute(array('name'=>'eee','age'=>23,'address'=>'assdada'));
2     $pdostatement->execute(array('eee',23,'assdada'));

      注意传参方式必须和装置占位符的不二法门同样

  预处理实施

     经过修正之后,执行进度如下所示

 1 <?php
 2     $dsn="mysql:host=127.0.0.1;dbname=example";
 3     $user="root";
 4     $password='';
 5     try
 6     {
 7         $pdo=new PDO($dsn,$user,$password);
 8         $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
 9 
10         $pdostatement=$pdo->prepare("INSERT INTO student VALUES (null,:name,:age,:address)");//关联占位,必须以:开头接
11 
12         $pdostatement->execute(array('name'=>'eee','age'=>23,'address'=>'assdada'));
13         $pdostatement->execute(array('name'=>'fff','age'=>24,'address'=>'assdada'));
14         $pdostatement->execute(array('name'=>'ggg','age'=>25,'address'=>'assdada'));
15         $pdostatement->execute(array('name'=>'hhh','age'=>26,'address'=>'assdada'));
16    
17     }
18     catch(PDOException $e)
19     {
20         echo $e->getMessage();
21     }    
22 ?>

    成功插入这样做即方便又安全,执行效用还高。

    图片 2

相关文章