11-6PDO预处理插入操作–PHP实战开发教程

11-6PDO预处理插入操作–PHP实战开发教程

湃葱耙充豌篓菠痕涉酪妮遂架


PDO预处理主要使用PDOStatement对象
该对象是通过: $pdo->prepare()方法创建
读写操作都可以通过:$pdoStmt->execute()方法进行
预处理SQL语句句中的占位符除可以使用?号之外,还可以使用命名参数,例如:name:email…
下面新增数据为例进行演示,共分6步:
1.连接数据库,创建PDO对象
2.准备预处理SQL语句,占位符使用命名参数格式:
3.创建PDO预处理对象: PDOStatement的实例
4. 绑定参数到SQL语句对象,预预处理对象
5. 执行新增操作(PDO中,读写都用execute())
6. 销毁PDO对象(可选)


user表原始结构:

11-6PDO预处理插入操作–PHP实战开发教程第1张


新建pdo_pre_insert.php

11-6PDO预处理插入操作–PHP实战开发教程第2张

代码:

<?php
//1.连接数据库,创建PDO对象
$pdo = new PDO('mysql:dbname=myuser', 'root', 'root');

//2.准备预处理SQL语句,占位符使用命名参数格式:
//password使用sha1()加密
//注意:使用set新增时下方的SQL语句像单引号的符号不是单引号  而是 Tab键上面的`符号
$sql="insert  user set `name`=:name,`email`=:email,`password`=sha1(:password)";
//上方语句可以写作:$sql="insert user (name,email,password) values (:name,:email,:password)";

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

//4. 绑定参数到预处理对象:sql语句对象
$data=['name'=>'杨过','email'=>'yangguo@123.com','password'=>'123'];
//
////bindParam()第一个参数:命名参数  第二个参数:实际参数   第三个参数[可以省略]:类型(string)
$stmt->bindParam(':name',$data['name'],PDO::PARAM_STR);
$stmt->bindParam(':email',$data['email'],PDO::PARAM_STR);
$stmt->bindParam(':password',$data['password'],PDO::PARAM_STR);

//5.执行新增操作 $stmt->execute()读与写都是这个函数
if($stmt->execute())//成功返回true  失败返回false
{
    //rowCount():返回上一个SQL语句影响的行数,即新增的行数
    echo "成功的添加了:".$stmt->rowCount()."条记录<br>";
}
else
{
    echo  "添加失败:";
    print_r($stmt->errorInfo());//这里输出只能用print_r或者var_dump,因为出错信息是array
    die();
}

//6.销毁PDO对象
$pdo = null;

执行:

11-6PDO预处理插入操作–PHP实战开发教程第3张

杨过被成功插入

11-6PDO预处理插入操作–PHP实战开发教程第4张


特别注意:

使用set新增时SQL语句中像单引号的符号不是单引号  而是 Tab键上面的`符号

如果不想踩这种坑,可以将sql语句改写为:

$sql=”insert user (name,email,password) values (:name,:email,:password)”;


$sql=”insert  user set `name`=:name,`email`=:email,`password`=sha1(:password)”;

还可以写作:

$sql=”insert  user set name=:name,email=:email,password=sha1(:password)”;


鳖罢丁围荣饲鞠童抗念暗捎措