1.PDO 是一个扩展库,使用之前先要安装这个扩展库。
2.其次还需要安装对应的数据库驱动,例如,你如果用的是MySQL,需要安装MySQL的驱动pdo_mysql;如果用的是sqlite,需要安装sqlite的驱动pdo_sqllite等等.
3.使用 PDO :
(1)创建 PDO 对象
//host:主机名,dbname:数据库名 $dsn = 'mysql:host=localhost;dbname=demo;charset=utf8'; $username = 'root'; $password = '123456'; try{ $pdo = new PDO($dsn, $username, $password); //设置错误模式-警告,报错方式不友好,不常用 //$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARING); //设置错误模式-抛出异常,常用 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ die('数据库连接失败'.$e->getMessage()); }
(2)执行数据库操作
i.PDO执行sql语句
exec 执行不要结果集的语句 例如 增删改
query 执行要结果集的语句 例如 查 desc
try{ $sql = 'inster into user(name, password, money) values("test", "123456", "1000")'; $sql2 = 'select * from user'; //exec返回影响的行数 $res = $pdo->exec($sql); //quer返回预处理对象,常用于查询语句select $res2 = $pdo->query($sql); if($res>0){ echo 'success'; //返回最后插入的数据的ID echo $pdo->lastInsertId(); }else{ echo 'failed'; } }catch(PDOException $e){ echo $e->getMessage(); }
ii.事务处理
事务:多条sql语句必须全部执行成功,只要有一条没有执行成功,就要进行回滚,回滚到初始的状态
【注】:表引擎有两种 myisam(不支持事务) innodb(支持事务)
$pdo->beginTransaction(); //开启一个事务
$pdo->commit(); //提交事务
$pdo->rollback(); //回滚到初始状态
try{ //开启事务 $pdo->beginTransaction(); //转出500 $sql = 'update user set money=money-500 where id=1'; $res = $pdo->exec($sql); if($res > 0){ echo 'out success'; }else{ throw new PDOException('out failed'); } //转入500 $sql = 'update user set money=money+500 where id=2'; $res = $pdo->exec(); if($res > 0){ echo 'in success'; }else{ throw new PDOException('in failed'); } //提交事务 $pdo->commit(); echo 'trade success'; }catch(PDOException $e){ //失败回滚 $pdo->rollback(); echo $e->getMessage(); }
iii.预处理
优点;效率高,安全(可以有效的防治sql注入)
try{ $sql = 'insert into user (name,password,money) values(:name,:password,:money)'; $stmt = $pdo->prepare($sql); $stmt->execute([:name => 'test',:password => '123456',:money => 1000]); }catch(PDOException $e){ echo $e->getMessage(); }
iiii.提取结果集
try{ $sql = 'select name,password,money from user'; $stmt = $pdo->prepare($sql); $stmt->execute(); //获取关联模式的结果集 //绑定列 bindColumn('name',$name); //fetchAll 获取所有数据,fetch 获取单条数据 $res = $stmt->fetch(PDO::FETCH_ASSOC); var_dump($res); }catch(PDOException $e){ echo $e->getMessage(); }