PDO中的预处理

Posted 下页、再停留

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PDO中的预处理相关的知识,希望对你有一定的参考价值。

PDO中的基本的原理和步骤和mysql中的预处理都是一样的,只不过就是把MySQL中的预处理所有命令行的语法封装成了PDO对象的几个公开的方法而已!

1.发送预处理语句

此时,我们需要调用pdo对象的prepare方法,得到一个PDOStatement结果对象!

2.绑定参数

调用PDOStatement对象中的bindParam方法:

3.执行预处理语句

调用PDOStatement对象中的execute方法,如果执行成功,就返回true,如果执行失败就返回false!

下面是代码

<?php 

/**
* 利用PDO对象实现预处理操作
*/

echo "<meta charset=utf-8>";

//PDO类的实例化

// 1 设置数据源相关参数
$dbms = \'mysql\';    //选择数据库类型
$host = \'localhost\';
$port = \'3306\';
$dbname = \'test\';
$charset = \'utf8\';
$dsn = "$dbms:host=$host;port=$port;dbname=$dbname;charset=$charset";

// 2 设置用户名密码
$user = \'root\';
$pwd = \'\';

// 3 实例化PDO类
$pdo = new PDO($dsn,$user,$pwd);

// 4 预处理
// 4.1 发送预处理
$sql = "insert into pdo values(null, ?, ?)";
$stmt = $pdo->prepare($sql);
// 4.2 绑定参数
// 先把每个参数保存到一个变量中
$name = \'qqqq\';
$age = \'45\';
//再使用bindParam方法绑定参数变量
$stmt->bindParam(1,$name);    //1代表第一个数据占位符
$stmt->bindParam(2,$age);

// 4.3 执行预处理语句
$res = $stmt->execute();
if ($res) {
    echo "预处理语句执行成功!";
}else{
    echo "预处理语句执行失败!";
}

先查一下数据库的数据

执行上述代码之后,结果如下:

 

绑定参数的其他方法

1 使用 :变量名 作为数据占位符

// 4 预处理
// 4.1 发送预处理
$sql = "insert into pdo values(null, :name, :age)";
$stmt = $pdo->prepare($sql);
// 4.2 绑定参数
// 先把每个参数保存到一个变量中
$name = \'qqqq\';
$age = \'45\';
//再使用bindParam方法绑定参数变量
$stmt->bindParam(\':name\',$name);    
$stmt->bindParam(\':age\',$age);

在对应位置修改为以上代码,其他代码不动

结果如下

2.使用数组绑定参数

// 4 预处理
// 4.1 发送预处理
//$sql = "insert into pdo values(null, ?, ?)";
$sql = "insert into pdo values(null, :name, :age)";
$stmt = $pdo->prepare($sql);
// 4.2 绑定参数
// 把每个参数保存到一个变量中
$name = \'qqqq\';
$age = \'45\';
// 使用数组绑定参数
$arr = array(
    \':name\'  =>  $name,
    \':age\'   =>  $age 
    );

// 4.3 执行预处理语句
$res = $stmt->execute($arr);

在对应位置修改为以上代码,其他代码不动

结果如下:

上述为在PDO中使用预处理的几种方式,可以对比着上一篇“MySQL的预处理技术”记忆! 

以上是关于PDO中的预处理的主要内容,如果未能解决你的问题,请参考以下文章

php PHP:PDO片段

我如何使用 pdo->prefer 在此代码中处理 sql 注入?

PDO中的预处理

学习PDO中的错误与错误处理模式

pdo预处理语句

PHP中的PDO操作学习预处理语句及事务