您的位置:首页 > 数据库 > MySQL

pdo - MySql数据库抽象连接中的利器

2017-01-09 16:21 302 查看
pdo是php中的扩展层 是抽象出来的类 优点是方便切换数据库和防止sql注入的问题 缺点时 操作起来 对数据的I/O速度会有一点影响 具体操作看当时的业务场景

连接数据库

<?php
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach($dbh->query('SELECT * from FOO') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>


pdo方法详解 < exec query >

int PDO::exec ( string $statement )


PDO::exec() 在一个单独的函数调用中执行一条 SQL 语句,返回受此语句影响的行数。注意:不会从一条 SELECT 语句中返回结果

int PDO::query ( sql )


PDO::query() 在一个单独的函 数调用中执行一条 SQL 语句,返回结果集。

事物列举

try{
$pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456", array(PDO::ATTR_AUTOCOMMIT=>0)); #一定要关闭自动提交
$pdo->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_EXCEPTION); #开启异常模式
}catch(PDOException $e){
echo "数据库连接失败:".$e->getMessage();
exit;
}

//执行SQL语句 exec() query()  prepare()
//一是有结果集的query(), 执行select语句
//exec()用来执行有影响行数的,update, delete insert, other
//exec()返回的是影响的行数
/*
*
* 事务处理
*
*   张三从李四那里买了一台 2000 元的电脑
*
*     从张三帐号中扣出 2000元
*
*     向李四账号中加入 2000元
*
*     从商品表中减少一台电脑
*
*     MyIsAM  InnoDB
*
*/

try{
$pdo->beginTransaction();

$price=500;

$sql="update zhanghao set price=price-{$price} where id=1";

$affected_rows=$pdo->exec($sql);

if(!$affected_rows)
throw new PDOException("张三转出失败");

$sql="update zhanghao set price=price+{$price} where id=3";

$affected_rows=$pdo->exec($sql);

if(!$affected_rows) #发现问题手动抛出异常
throw new PDOException("向李四转入失败");

echo "交易成功!";
$pdo->commit();
}catch(PDOException $e){
echo $e->getMessage();
$pdo->rollback(); //只要捕获异常则回滚
}

//不管执行成功还是失败最后都要在关闭自动提交
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1);

//设置错误报告模式 ERRMODE_SILENT    ERRMODE_WARNING


参考文档: http://php.net/manual/zh/book.pdo.php
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql php 数据库