一、什么是PDO
PDO是PHP数据对象(PHP Data Object)的缩写
二、怎么查看php是否支持PDO
三、学习PDO类
1.DSN The Data Source Name 用来区分你要连接声明数据库的标识作用
2. 实例化对象 如果实例化失败 会抛出一个异常 我们可以使用try{}catch(){}结构接受异常 输出异常详细信息
3.设置字符集
如果你在dsn的地方设置字符集了 就可以省略这个步骤
$sql="set names utf8";
$pdo->exec($sql);
<?php
//quote
//1.准备dsn
$mysql = ‘mysql:dbname=ss21;host=localhost;charset=utf8‘;
//2.实例化对象
try{
$pdo = new PDO($mysql,‘root‘,‘123456‘);
}catch(PDOException $e){
echo $e->getMessage();
}
//3.设置字符集
//4.开启错误模式
$pdo->setAttribute(3,1);
$name ="jack‘s yingwenming";
//将sql语句里面可能破坏sql语句的内容转义掉
$name = $pdo->quote($name);
//echo $name;exit;
//$name = "‘ or 1=1 or ‘";
$sql="INSERT INTO info(name,sex,age,city) VALUES({$name},0,18,‘东莞‘)";
// echo $sql;exit;
//$sql="delete from info where id =‘{$name}‘";
//$sql="SELECT * FROM info WHERE name=‘{$name}‘";
//echo $sql;exit;
echo $pdo->exec($sql);
4.设置错误信息
PDO::ATTR_ERRMODE: Error reporting.
PDO::ERRMODE_SILENT: Just set error codes. 沉默模式
PDO::ERRMODE_WARNING: Raise E_WARNING. warning错误
PDO::ERRMODE_EXCEPTION: Throw exceptions. 异常错误
5.基本操作开始
6.发送sql语句
四、 基本操作
1. exec() 执行增删改操作的发送语句
2.query() 执行的是查询的发送语句
五、 事务操作
a) beginTransaction() 开启事务方法
b) commit() 确认事务完成方法
c) rollBack() 回滚操作
<?php
//事务操作
//1.准备dsn
$mysql = ‘mysql:dbname=ss21;host=localhost;charset=utf8‘;
//2.实例化对象
try{
$pdo = new PDO($mysql,‘root‘,‘123456‘);
}catch(PDOException $e){
echo $e->getMessage();
}
//3.设置字符集
//4.开启错误模式
$pdo->setAttribute(3,1);
//常规操作
//InnoDB
//MyISAM
//1.开启事务
$pdo->beginTransaction();
//2. 一系列操作
$sql = "UPDATE info SET money =money-5000 WHERE id=10";
$row = $pdo->exec($sql);
$sql = "UPDATE info SET money =money+5000 WHERE id=1000";
$row += $pdo->exec($sql);
//判断结果
if($row == 2){
//确定完成
$pdo->commit();
}else{
//回滚操作
$pdo->rollBack();
}
// var_dump($row);
六、 参数绑定(问号)
<?php
//预处理和问号占位符
//1.准备dsn
$mysql = ‘mysql:dbname=ss21;host=localhost;charset=utf8‘;
//2.实例化对象
try{
$pdo = new PDO($mysql,‘root‘,‘123456‘);
}catch(PDOException $e){
echo $e->getMessage();
}
//3.设置字符集
//4.开启错误模式
$pdo->setAttribute(3,1);
//准备一个模版sql语句
$sql="INSERT INTO info(name,sex,age,city) VALUES(?,?,?,?)";
//发送模版语句
//得到预处理对象
$stmt=$pdo->prepare($sql);
//var_dump($stmt);
$name = ‘变态想‘;
$sex = 0;
$age = 250;
$city =‘臭水沟‘;
//绑定参数
//bindParam
//1.参数1是数字 而且要从1开始连续的数字
//2.参数必须是一个变量
$stmt->bindParam(1,$name);
$stmt->bindParam(2,$sex);
$stmt->bindParam(3,$age);
$stmt->bindParam(4,$city);
//执行 返回一定是bool
$bool = $stmt->execute();
var_dump($bool);
批量绑定参数
注意: 需要是从下标为0开始连续的索引数组
<?php
//批量绑定参数问号占位符
//1.准备dsn
$mysql = ‘mysql:dbname=ss21;host=localhost;charset=utf8‘;
//2.实例化对象
try{
$pdo = new PDO($mysql,‘root‘,‘123456‘);
}catch(PDOException $e){
echo $e->getMessage();
}
//3.设置字符集
//4.开启错误模式
$pdo->setAttribute(3,1);
//准备一个模版sql语句
$sql="INSERT INTO info(name,sex,age,city) VALUES(?,?,?,?)";
//发送模版语句
//得到预处理对象
$stmt=$pdo->prepare($sql);
//var_dump($stmt);
$name = ‘想变态‘;
$sex = 0;
$age = 250;
$city =‘臭水沟‘;
//问号占位符 批量绑定参数
//必须从下标为0开始连续的索引数组
$data = array(
‘猥琐想‘,
$sex,
$age,
$city
);
//var_dump($data);
//执行 返回一定是bool
$bool = $stmt->execute($data);
var_dump($bool);
七、 绑定参数(冒号占位)
<?php
//冒号占位符绑定参数
//1.准备dsn
$mysql = ‘mysql:dbname=ss21;host=localhost;charset=utf8‘;
//2.实例化对象
try{
$pdo = new PDO($mysql,‘root‘,‘123456‘);
}catch(PDOException $e){
echo $e->getMessage();
}
//3.设置字符集
//4.开启错误模式
$pdo->setAttribute(3,1);
//准备一个模版sql语句
$sql="INSERT INTO info(name,sex,age,city) VALUES(:name,:sex,:age,:city)";
$stmt = $pdo->prepare($sql);
$name = ‘加倍‘;
$sex =1;
$age = 20;
$city=‘斗地主‘;
//绑定参数 冒号形式
$stmt->bindParam(‘name‘,$name);
$stmt->bindParam(‘sex‘,$sex);
$stmt->bindParam(‘age‘,$age);
$stmt->bindParam(‘city‘,$city);
//执行
$bool = $stmt->execute();
var_dump($bool);
------分界线-----(以下:冒号批量绑定参数)---
<?php
//冒号批量绑定参数
//1.准备dsn
$mysql = ‘mysql:dbname=ss21;host=localhost;charset=utf8‘;
//2.实例化对象
try{
$pdo = new PDO($mysql,‘root‘,‘123456‘);
}catch(PDOException $e){
echo $e->getMessage();
}
//3.设置字符集
//4.开启错误模式
$pdo->setAttribute(3,1);
//准备一个模版sql语句
$sql="INSERT INTO info(name,sex,age,city) VALUES(:name,:sex,:age,:city)";
$stmt = $pdo->prepare($sql);
// $name = ‘抢地主‘;
// $sex =1;
// $age = 20;
// $city=‘斗地主‘;
// $data = array(
// ‘name‘=>‘超级加倍‘,
// ‘sex‘=>‘1‘,
// ‘age‘=>‘20‘,
// ‘city‘=>‘斗地主‘,
// );
// 这个数组为什么这么像$_POST
//var_dump($data);exit;
// var_dump($_POST);
//执行
$bool = $stmt->execute($_POST);
var_dump($bool);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="demo.php" method="post">
name : <input type="text" name="name"><br/>
age : <input type="text" name="age"><br/>
sex : <input type="text" name="sex"><br/>
city : <input type="text" name="city"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
原文:https://www.cnblogs.com/abinlulu/p/9938789.html