实例
header("Content-type: text/html; charset=utf-8");
/医院
* PDO预处理更新操作
* PDO的预处理使用的是PDOStatement对象
* $pdo->prepare()创建stmt对象
* sql语句中的占位符全部采用:命名占位符,不用?
*/
//1.连接数据库
require 'pdo_connect.php';
//2.sql语句 UPDATE user SET name =:name,email=:email,password=sha1(:password)
$sql="UPDATE `user` SET `user_name`=:user_name,`email`=:email,`password`=sha1(:password) WHERE `user_id`=:user_id";
//3.创建PDO预处理对象stmt
$stmt=$pdo->prepare($sql);
//4.要更新的数据
$data=['user_name'=>'孔明','email'=>'km@qq.com','password'=>'333','user_id'=>1];
/*
* 4.1绑定变量到预处理对象:SQL语句对象
* $stmt->bindParam(参数,变量,类型)
*/
//$stmt->bindParam(':name',$data['user_name'],PDO::PARAM_STR);
//$stmt->bindParam(':email',$data['email'],PDO::PARAM_STR);
//$stmt->bindParam(':password',$data['password'],PDO::PARAM_STR);
//5.执行操作
if($stmt->execute($data))
{
//成功会返回受影响的记录数
echo '
更新了'.$stmt->rowCount().'条记录
';}else{
echo '
更新失败
';print_r($stmt->errorInfo());
die();
}
运行实例 »
点击 "运行实例" 按钮查看在线实例
总结:
在生成网页时,许多PHP脚本通常都会执行除参数之外,其他部分完全相同的查询语句,针对这种重复执行一个查询,每次迭代使用不同的参数情况,PDO提供了一种名为预处理语句(prepared statement)的机制。它可以将整个SQL命令向数据库服务器发送一次,以后只有参数发生变化,数据库服务器只需对命令的结构做一次分析就够了,即编译一次,可以多次执行。会在服务器上缓存查询的语句和执行过程,而只在服务器和客户端之间传输有变化的列值,以此来消除这些额外的开销。这不仅大大减少了需要传输的数据量,还提高了命令的处理效率。可以有效防止SQL注入,在执行单个查询时快于直接使用query()或exec()的方法,速度快且安全
PDO对预处理语句的支持需要使用PDOStatement类对象,但该类的对象并不是通过NEW关键字实例化出来的,而是通过执行PDO对象的prepare()方法,在数据库服务器中准备好一个预处理的SQL语句后直接返回的。如果通过之前执行PDO对象的query()方法返回的PDOStatement类对象,只代表的是一个结果集对象。而如果通过执行PDO对象中的prepare()方法产生的PDOStatement类对象,则为一个查询对象,能定义和执行参数化的SQL命令