PDO, 他大舅他二舅都是他舅!

个人理解

pdo是进程和各种数据库之间的中间层, 用来抹平数据库的差异,从而降低使用各种版本品牌数据库的复杂性.类似于linux的VFS.
难以逾越的地方在于如果想一键切换数据库必须要写个个数据库都兼容的sql语句.
于是, PDO成为了支持多种数据库的框架的利器.(框架一般会封装一个ActiveRecord类避免使用原生SQL);
综上所述:开发效率提高, 执行效率下降

connection


<?php
/*
DSN = "mysql:host=服务器地址/名称;port=端口号;dbname=数据库名";
Options = array[
PDO::MYSQL_ATTR_INIT_COMMAND=>’set names utf8’
PDO::ATTR_PERSISTENT => true //开启持久化连接, 在swoole里用, fpm不使用
];
$pdo = new pdo(DSN, "用户名", "密码", Options);
*/
$dsn = "mysql:host=localhost; port=3306; dbname=php39";
$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'set names utf8');
$pdo = new PDO($dsn, 'root', '123', $opt);
var_dump($pdo);
?>

statements

<?php
$dsn = "mysql:host=localhost; port=3306; dbname=php39";
$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'set names utf8');
$pdo = new PDO($dsn, 'root', '123', $opt);

$sql = "select * from tab_int limit 0, 3";
$stmt = $pdo->query($sql);	//得到pdo的结果集
$arr1 = $stmt->fetch(PDO::FETCH_ASSOC);	//返回关联数组
$arr2 = $stmt->fetch(PDO::FETCH_NUM);	//返回索引数组
$arr3 = $stmt->fetch();	//相当于fetch(PDO::FETCH_BOTH)
echo "<br />"; print_r($arr1);
echo "<br />"; print_r($arr2);
echo "<br />"; print_r($arr3);
?>

prepare

<?php
$dsn = "mysql:host=localhost; port=3306; dbname=php39";
$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'set names utf8');
$pdo = new PDO($dsn, 'root', '123', $opt);

$sql = "select user_id, user_name, age,edu from user_list where user_id= ? and user_name = ? ";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(1, 6);	//占位符按自然顺序,从1开始
$stmt->bindValue(2, 'user2');//第2项给值为“user2”;
$stmt->execute();
$arr = $stmt->fetch(PDO::FETCH_ASSOC);
//PRINT_R($arr);


//echo "<hr />";
$sql = "select user_id, user_name, age,edu from user_list where user_id= :v1 and user_name = :v2 ";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(":v1", 6);	//命名参数,直接使用该名字
$stmt->bindValue(":v2", 'user2');
$stmt->execute();
$arr = $stmt->fetch(PDO::FETCH_ASSOC);
PRINT_R($arr);
?>

获取错误信息

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
	<title>网页标题</title>
	<meta name="keywords" content="关键字列表" />
	<meta name="description" content="网页描述" />
	<link rel="stylesheet" type="text/css" href="" />
	<style type="text/css"></style>
	<script type="text/javascript"></script>
</head>
<body>
<?php
$dsn = "mysql:host=localhost; port=3306; dbname=php39";
$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'set names utf8');
$pdo = new PDO($dsn, 'root', '123', $opt);
var_dump($pdo);
$sql = "updateeeee  tab_int  set f1 = 1; ";	//这个sql语句肯定是错误
$result = $pdo->exec($sql);
if($result === false){
	echo "<p>发生错误:";
	echo "<br />错误代号:" . $pdo->errorcode();
	$e = $pdo->errorinfo();	//这是一个数组!第3项才是错误信息
	//var_dump($e);
	echo "<br />错误信息:" . $e[2];
}

//下面,让pdo对象“进入”异常模式,以处理出错信息:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//然后,下面开始演示异常模式的代码:
try{
	$sql = "deleteeeeee  from  user_list;";
	$result = $pdo->exec($sql);
	echo "执行成功";
}
catch(Exception $e){	//这个$e就是错误对象
	echo "<p>发生错误:";
	echo "<br />错误代号:" . $e->GetCode();	//获取该错误的对象的错误代号
	echo "<br />错误信息:" . $e->GetMessage();	//获取该错误的对象的错误提示
}
?>
</body>
</html>

PDO事物操作

<?php
//实例化PDO对象
$dsn = "mysql:host=127.0.0.1;dbname=php_7;port=3306;charset=utf8";
$user = 'root';
$pass = 'root';
$pdo = new PDO($dsn,$user,$pass);

//先开启事务
$pdo -> beginTransaction();

//先从宋江的账号上扣3000
$sql = "UPDATE cash SET money=money-3000 WHERE name='宋江'";
$res1 = $pdo -> exec($sql);

//李逵的账号上加 3000
$sql = "UPDATE cash SET money=money+3000 WHERE name='李逵'";
$res2 = $pdo -> exec($sql);

if($res1 && $res2){
    //一组操作都成功则提交
    $pdo -> commit();
}else{
    //有任何一个单元出错则回滚
    $pdo -> rollBack();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值