预处理好处是:编译一次多次执行,用来解决一条SQL语句多次执行的问题,提高了执行效率。 预处理语句: - prepare 预处理名字 from 'sql语句'
复制代码执行预处理
PDO中的预处理——位置占位符
- <?php
- $dsn='mysql:dbname=data;charset=utf8';
- $pdo=new PDO($dsn,'root','root');
- //创建预处理对象
- $stmt=$pdo->prepare("insert into bank values (?,?)"); //?是占位符
- //执行预处理
- $cards=[
- ['1003',500],
- ['1004',100]
- ];
- foreach($cards as $card){
- //绑定参数,并执行预处理,
- //方法一:
- /*
- $stmt->bindParam(1, $card[0]); //给SQL语句传参。占位符的位置从1开始
- $stmt->bindParam(2, $card[1]);
- $stmt->execute(); //执行预处理
- */
- //方法二:
- /*
- $stmt->bindValue(1, $card[0]);//给SQL语句传参。占位符的位置从1开始
- $stmt->bindValue(2, $card[1]);
- $stmt->execute();
- */
- //方法三:如果占位符的顺序和数组的顺序一致,可以直接传递数组
- $stmt->execute($card);
- }
复制代码
PDO中的预处理——参数占位符
- <?php
- $dsn='mysql:dbname=data;charset=utf8';
- $pdo=new PDO($dsn,'root','root');
- //创建预处理对象
- $stmt=$pdo->prepare("insert into bank values (:p1,:p2)"); //:p1,:p2是参数占位符
- //执行预处理
- $cards=[
- ['p1'=>'1005','p2'=>500],
- ['p1'=>'1006','p2'=>1000]
- ];
- foreach($cards as $card){
- //方法一:
- /*
- $stmt->bindParam(':p1', $card['p1']);
- $stmt->bindParam(':p2', $card['p2']);
- $stmt->execute();
- */
- //方法二:但数组的下标和参数名一致的时候就可以直接传递关联数组
- $stmt->execute($card);
- }
- ?>
复制代码
总结
1、?是位置占位符 2、参数占位符以冒号开头 3、$stmt->bindParam()和$stmt->bindValue()区别 - bindParam的第二个参数只能是变量。bindValue的第二个参数可以是变量也可以是字面量。
复制代码4、预处理的好处
|