PDO方式操作数据库
1.PDO方式连接数据库
1 |
$pdo = new PDO("mysql:host=localhost;dbname=db_demo","root","password"); |
2.执行SQL语句
用于有记录结果返回的操作,特别是SELECT操作:
1 |
PDO::query() |
针对没有结果集合返回的操作,如INSERT、UPDATE等操作:
1 |
PDO::exec() |
3.获取结果集
获取一条记录:
1 |
PDOStatement::fetch() |
获取所有记录集(可以使用PDO::FETCH_ASSOC返回索引数组)
1 |
PDOStatement::fetchAll() |
EXAMPLE 1 PDO查询操作
1 2 3 4 5 6 7 8 9 10 |
<?php header('content-type:text/html;charset=utf-8'); $dsn = "mysql:host=localhost;dbname=test"; $pdo = new PDO($dsn,'root','root'); $pdo->exec('set names utf8'); $sql = "SELECT * FROM users"; $stmt = $pdo->query($sql); //$data = $stmt->fetch(PDO::FETCH_ASSOC); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); var_dump($data); |
note:
- 可以使用PDO::FETCH_ASSOC返回索引数组
- PDO可以操作很多种数据库
EXAMPLE 2 PDO修改操作
1 2 3 4 5 6 7 8 |
<?php header('content-type:text/html;charset=utf-8'); $dsn = "mysql:host=localhost;dbname=test"; $pdo = new PDO($dsn,'root',''); $pdo->exec('set names utf8'); $sql = "UPDATE users SET money=500 WHERE id=1"; $result = $pdo->exec($sql); var_dump($result); |
PDO事务控制
1.开启事务
1 |
$pdo -> beginTransation(); |
2.事务回滚
1 |
$pdo -> rollback(); |
3.事务提交
1 |
$pdo -> commit() |
4.自动提交
1 |
$pdo -> setAttrbute(PDO::ATTR_AUTOCOMMIT,1); |
EXAMPLE 3 PDO事务控制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php header('content-type:text/html;charset=utf-8'); $dsn = "mysql:host=localhost;dbname=test"; $pdo = new PDO($dsn,'root',''); $pdo->exec('set names utf8'); $pdo->beginTransaction(); //开启事务 $sql1 = "UPDATE users SET money=money-100 WHERE id=1"; $r1 = $pdo->exec($sql1); $sql2 = "UPDATE1 users SET money=money+100 WHERE id=2"; $r2 = $pdo->exec($sql2); if($r1>0 && $r2>0){ $pdo->commit(); //事务提交 echo "操作成功"; }else{ $pdo->rollBack(); //事务回滚 echo "操作失败"; } $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1); //var_dump($result); |
PDO预处理
1.暂时不赋值,使用问好或者:name来代替
1 |
$sql = "???"; |
2.创建预编译对象
1 |
$pdo -> prepare($sql); |
3.参数赋值
1 |
$stmt -> bind_param() |
4.执行代码
1 |
$stmt -> execute() |
5.获取一个结果
1 |
$stmt -> fetch() |
6.获取所有结果
1 |
$stmt -> fetch() |
EXAMPLE 4 PDO预处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php header('content-type:text/html;charset=utf-8'); $dsn = "mysql:host=localhost;dbname=test"; $pdo = new PDO($dsn,'root',''); $pdo->exec('set names utf8'); //$sql = "SELECT * FROM users WHERE id>:id"; $sql = "UPDATE users SET money=1000 WHERE id=:id"; $stmt = $pdo->prepare($sql); $id = 4; $stmt->bindParam(":id",$id); //$stmt->bindValue(1,2); $result = $stmt->execute(); var_dump($result); //$data = $stmt->fetchAll(PDO::FETCH_ASSOC); //var_dump($data); |
note:
- 与MySQLi的不同之处在于可以使用:name的方式来代替值
- bindParam可以使用:name不需要声明类型