方法:bool PDOStatement::execute ([ array $input_parameters ] )

分为3步: 
1. 使用 prepare() 准备预处理SQL; 
2. 绑定参数或值; 
3. 调用 execute() 执行SQL。

其中后面两步可以合并。

 

预处理

 

执行一条问号占位符的预处理语句(占位符)

示例:

<?php
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->bindParam(1, $calories, PDO::PARAM_INT);
$sth->bindParam(2, $colour, PDO::PARAM_STR, 12);
$sth->execute();

bindParam() 只有前两个参数是必选。第三个参数默认是 PDO::PARAM_STR 。

 

执行一条绑定变量的预处理语句(命名参数)

示例:

<?php
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();

测试发现:使用命名参数绑定的时候, bindParam 第一个参数没写冒号,也可以执行的:

$sth->bindParam('calories', $calories, PDO::PARAM_INT);
$sth->bindParam('colour', $colour, PDO::PARAM_STR, 12);

但不建议这样写。

 

使用一个含有插入值的数组执行一条预处理语句(占位符)

示例:

<?php
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->execute(array($calories, $colour));

数组里值一定要和SQL里参数顺序一致。

 

使用一个含有插入值的数组执行一条预处理语句(命名参数)

示例:

<?php
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->execute(array(
':calories' => $calories,
':colour' => $colour
));

推荐使用这种方式。

 

bindParam() 和 bindValue()的区别

方法 bindParam()  和  bindValue()  非常相似,唯一的区别就是前者使用一个PHP变量绑定参数,而后者使用一个值。

所以使用bindParam是第二个参数只能用变量名,而不能用变量值,而 bindValue() 至可以使用具体值。

示例:

<?php
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ?');
$sth->bindParam(1, $calories, PDO::PARAM_INT);//正确
$sth->bindValue(1, $calories, PDO::PARAM_INT);//正确
$sth->bindParam(1, 150, PDO::PARAM_INT);//错误,必须是参数
$sth->bindValue(1, 150, PDO::PARAM_INT);//正确
$sth->execute();

另外在存储过程中, bindParam 可以绑定为 input/output 变量,如下面

$sth = $pdo->prepare("call func(:param)");
$param = "test";
$sth->bindParam(":param",$param); //正确
$sth->execute();

存储过程执行过后的结果可以直接反应到变量上。对于那些内存中的大数据块参数,处于性能的考虑,应优先使用 bindParam() 。

 

拓展阅读

1、PDOStatement::execute http://www.runoob.com/php/pdostatement-execute.html 
2、php pdo中bindParam() 和 bindValue()方法的区别 https://blog.csdn.net/think2me/article/details/7258509 
3、官网介绍pdo的execute这么绑定命名参数,但是不写冒号也行 https://segmentfault.com/q/1010000007480197 
4、Yaf封装MySQL https://blog.csdn.net/doomsday0417/article/details/70810366

PDO预处理的更多相关文章

  1. MySQL pdo预处理能防止sql注入的原因

    MySQL pdo预处理能防止sql注入的原因: 1.先看预处理的语法 $pdo->prepare('select * from biao1 where id=:id'); $pdo->e ...

  2. pdo 预处理

      <?php /* * pdo 预处理sql */ $dsn = "mysql:dbname=0328;host=localhost"; $username = " ...

  3. 2017-07-25 PDO预处理以及防止sql注入

    首先来看下不做任何处理的php登录,首先是HTML页面代码 <html> <head><title>用户登录</title></head> ...

  4. 前端学PHP之PDO预处理语句

    × 目录 [1]定义 [2]准备语句 [3]绑定参数[4]执行查询[5]获取数据[6]大数据对象 前面的话 本来要把预处理语句和前面的基础操作写成一篇的.但是,由于博客园的限制,可能是因为长度超出,保 ...

  5. php pdo预处理语句与存储过程

    很多更成熟的数据库都支持预处理语句的概念.什么是预处理语句?可以把它看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制.预处理语句可以带来两大好处: 1.查询仅需解析(或预处理) ...

  6. PHP基础知识之————PDO预处理语句

    转载处:http://www.cnblogs.com/xiaohuochai/p/6133353.html 定义 在生成网页时,许多PHP脚本通常都会执行除参数之外,其他部分完全相同的查询语句,针对这 ...

  7. PDO预处理语句规避SQL注入攻击

    所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存 ...

  8. PDO预处理语句

    1.造PDO对象$dsn = "mysql:dbname=mydb;host=localhost";$pdo = new PDO($dsn,"root",&qu ...

  9. PHP PDO 预处理语句与存储过程

    很多更成熟的数据库都支持预处理语句的概念. 什么是预处理语句?可以把它看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制.预处理语句可以带来两大好处: 查询仅需解析(或预处理)一 ...

随机推荐

  1. Java 下的 JSON库性能比较:JSON.simple

    JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考了.我们很少会去想用到的这些JSON库到底有什么不同,但事实上它 ...

  2. Win7 64位 MinGW环境测试SDL2.0.3

    下载MinGW版的文件 http://www.libsdl.org/release/SDL2-devel-2.0.3-mingw.tar.gz 解压放到mysys下面 运行Makefile mysys ...

  3. ASP.NET使用ConfigurationSection在Web.Config创建自定义配置节集合

    核心代码 using System; using System.Data; using System.Configuration; using System.Web; using System.Web ...

  4. VM12安装OS X10.11步骤及说明

    参考文献: 1. http://www.crsay.com/network/enable-hardware-based-dep.html 2. http://jingyan.baidu.com/art ...

  5. 介绍一些chrome 好用的插件和快捷键

    1.AdBlock ★★★ 最受欢迎的Google 浏览器扩充功能,拥有超过8 百万位使用者!阻挡网路上所有的广告. 2.印象笔记 -剪裁 无需多说! 3.豆藤 Bean vine ★★★★ 豆瓣有此 ...

  6. IOS绘制渐变背景色折线图的一种尝试

    1.绘制折线图 上次在群里看到一个折线图划的很漂亮,自己想实现一个这样的 ,但是一直没什么头绪,不知道怎么做,就开始在网上查找划线,绘 制渐变色这一块的内容,用最笨的方式,自己尝试的写了一些,也没 有 ...

  7. css中关于position属性的探究(原创)

    关于position属性的设置,头脑中一直觉得不是很清楚,所以借助这次机会单独自己测试了一下,记作学习笔记.   首先,css的position属性包含下面四种设置情况: static:默认属性.指定 ...

  8. vb---输入模式之文本输入与二进制输入区别

    使用 VB6 MSCOMM 控件 进行二进制收发 发布时间:2012-01-10 12:12:01 技术类别:嵌入式     MSCOMM 控件是用于串口通信的,使用方便.在VB中,这个串口控件缺省是 ...

  9. Connecting sql server2008 through C#

    本实例只在于将通过ASP.NET上的控件(如button.textbox等)结合C#中类的应用,将自己需要的数据存入当地的SQL SERVER数据库中 首先我们在项目中需要建立一个ASP.NET We ...

  10. hdu 5944 Fxx and string

    \:nn,下标从1开始,第\:i\:i位的字母为\:s_is​i​​,现在Fxx想知道有多少三元组\:(i,j,k)\:(i,j,k)满足下列条件 1.i,j,k\:i,j,k三个数成等比数列 2.s ...