增、删、改
<?php
header("content-type:text/html;charset=utf-8");
/*
PDO 与连接相关的选项
exec() 返回 手影响行数 增删改
query() 返回对象 查
*/
//PDO的使用
try {
//实例化PDO对象 参数: DSN User Pass
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
//设置字符集
$pdo->query('set names utf8');
//设置属性
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
echo '<hr>';
try {
//增
$sql = "INSERT INTO user VALUES(null, 't6', '0', '18', '上海')";
$rows = $pdo->exec($sql);
$id = $pdo->lastInsertId();
echo "共插入{$rows}条记录<br>";
echo "自增ID为:{$id}<br>";
//改
$sql = "UPDATE user SET name='p2' WHERE id='$id'";
$rows = $pdo->exec($sql);
echo "共更新了{$rows}条记录<br>";
//删
$sql = "DELETE FROM user WHERE id='$id'";
$rows = $pdo->exec($sql);
echo "共删除了{$rows}条记录<br>";
} catch (Exception $e) {
echo $e->getMessage();
exit;
}
查1 获取查询数组遍历
<?php
header("content-type:text/html;charset=utf-8");
/*
PDO 与连接相关的选项
query() 返回PDOStatement对象
处理结果集
fetch() 单条数据/首条/一维数组
fetchAll() 所有数据/二维数组
属性: PDO::ATTR_DEFAULT_FETCH_MODE
值: PDO::FETCH_ASSOC 关联
PDO::FETCH_NUM 索引
PDO::FETCH_OBJ 对象
PDO::FETCH_BOTH 混合
*/
//PDO的使用
try {
//实例化PDO对象 参数: DSN User Pass
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
//设置字符集
$pdo->query('set names utf8');
/*//设置属性
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);//关联
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_NUM);//索引
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);//对象
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_BOTH);//混合数组(默认的)*/
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
echo '<hr>';
try {
// SQL
$sql = "SELECT * FROM user";
$stmt = $pdo->query($sql);
//单条数据
$rows = $stmt->fetch();
//所有数据
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $k => $v) {
echo $v['id'].':';
echo $v['name'].':';
echo $v['sex'].':';
echo $v['age'].':';
echo $v['province'].'<br>';
}
} catch (Exception $e) {
echo $e->getMessage();
exit;
}
查2 直接遍历PDOStatement对象
<?php
header("content-type:text/html;charset=utf-8");
//PDO的使用
//使用foreach遍历 PDOStatement对象
try {
//实例化PDO对象 参数: DSN User Pass
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
//设置字符集
$pdo->query('set names utf8');
//设置属性
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);//关联
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
echo '<hr>';
try {
// SQL
$sql = "SELECT * FROM user";
$stmt = $pdo->query($sql);
//所有数据
// $rows = $stmt->fetch(PDO::FETCH_ASSOC);
foreach ($stmt as $k => $v) {
echo $v['id'].':';
echo $v['name'].':';
echo $v['sex'].':';
echo $v['age'].':';
echo $v['province'].'<br>';
}
} catch (Exception $e) {
echo $e->getMessage();
exit;
}
预处理
好处:
1).对用户的数据 进行过滤,用于提高安全性
2).提高批量操作的性能
<?php
header("content-type:text/html;charset=utf-8");
/*
PDO预处理
预处理SQL的方式
1. ?
2. :
绑定参数的方式
1. bindValue()
2. bindParam()
3. execute(array())
*/
//实例化PDO
try {
$pdo = new PDO(DSN, USER, PASS);
$pdo->exec("set names utf8");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
//预处理
try {
// 1.定义SQL,关键部分 使用在占位符 代替 :
$sql = "INSERT INTO user (name,age,sex) VALUES(:name,:age,:sex)";
// 2.预处理SQL ,返回的是PDOStatement对象
$stmt = $pdo->prepare($sql);
// 4.正式试行SQL
$stmt->execute(array(':name'=>'alan','age'=>'18','sex'=>'男'));
$rows = $stmt->rowCount();//获取受影响行数
$id = $pdo->lastInsertId();//自增ID
echo "共插入{$rows}条数据,自增ID为:{$id}";
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
PDO事务处理
<?php
header("content-type:text/html;charset=utf-8");
/*
PDO 的 事务
事务:
将多条SQL操作(增删改),作为一个整体的单元来操作,都执行成功则成功,有一条失败,则都是失败
mysql的事务
begin 开启一个事务的回滚点
rollback 回滚一个事务,回到begin前的样子
commit 提交一个事务,只有被提交的事务,才会真正的被执行到数据库里
*/
//实例化PDO
try {
$pdo = new PDO(DSN, USER, PASS);
$pdo->exec("set names utf8");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//设置关闭自动提交
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);
//开启事务
$pdo->beginTransaction();
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
try {
//批量操作
$data = array(
array('alan1','0','18'),
array('alan2','2','20'),
array('alan3','1','27'),
);
$sql = "INSERT INTO user (name, sex, age) VALUES (?,?,?)";
$stmt = $pdo->prepare($sql);
$count = 0;//统计插入条数
$ids = array();//记录自增ID
foreach ($data as $v) {
$stmt->execute($v);
$count += $stmt->rowCount();//总执行的次数
$ids[] = $pdo->lastInsertId();//自增ID们
}
//成功则 提交事务
$pdo->commit();
echo "共插入{$count}条数据<br>";
var_dump($ids);
} catch (PDOException $e) {
//回滚一个事务
$pdo->rollback();
echo $e->getMessage();
exit;
}