博客列表 >PDO预处理连接数据库,添加操作,更新操作

PDO预处理连接数据库,添加操作,更新操作

Pengsir
Pengsir原创
2018年05月02日 19:27:352019浏览

PDO连接数据库:

实例

<?php
/医院
 * PDO连接数据库
 */
//1.配置参数
/*
 * 数据源:DSN
 * 基本格式:数据库的类型:属性=值...
 * mysql:host=127.0.0.1;dbname=php;charset=utf-8;port=3306
 */
$pdo=new PDO('mysql:dbname=php','root','root');

运行实例 »

点击 "运行实例" 按钮查看在线实例

PDO预处理添加操作:

实例

<?php
header("Content-type: text/html; charset=utf-8");
/医院
 * PDO预处理添加操作
 * PDO的预处理使用的是PDOStatement对象
 * $pdo->prepare()创建stmt对象
 * sql语句中的占位符全部采用:命名占位符,不用?
 */
//1.连接数据库
require 'pdo_connect.php';

//2.sql语句 INSERT user SET name =:name,email=:email,password=sha1(:password)
$sql="INSERT `user` SET `user_name`=:user_name,`email`=:email,`password`=sha1(:password)";

//3.创建PDO预处理对象stmt
$stmt=$pdo->prepare($sql);

//4.要插入到数据库里的数据 data数组中的参数对应$sql命名占位符
$data=['user_name'=>'张飞','email'=>'zf@qq.com','password'=>'333'];

/*
 * 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 '<h3>成功添加了'.$stmt->rowCount().'条记录</h3>';
}else{
    echo '<h3>添加失败</h3>';
    print_r($stmt->errorInfo());
    die();
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

PDO预处理更新操作:

实例

<?php
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 '<h3>更新了'.$stmt->rowCount().'条记录</h3>';
}else{
    echo '<h3>更新失败</h3>';
    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命令

运行效果图:



PDO预处理操作数据库.png

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议