基础级-PDO

来源:互联网 发布:查看淘宝店铺开店时间 编辑:程序博客网 时间:2024/05/18 03:44

  • 前述
  • 开启1
  • 连接数据库
    • 连接
    • 异常
    • 字符编码
    • 错误
  • 查询
    • exec方法
    • query方法
    • fetch方法
    • 预处理语句
    • prepare方法
    • bindValue方法
    • execute方法
    • fetchAll方法
  • 小玩意
    • 最后插入ID
  • 事务
  • 关闭
  • 尾注

前述

PDO(PHP Data Object)在旧版PHP中无法使用,将在未来取代繁杂的数据库接口。

开启1

开启文件:php.ini
相关代码:(去除所需数据库的注释即可)

extension=php_pdo.dll //如若没有,请自行添加extension=php_pdo_mysql.dll //MySQL数据库

连接数据库

try{    $pdo = new PDO('mysql:host=localhost;dbname=db_name', 'username', 'password');    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    $pdo->exec('SET NAMES "utf8"');}catch(PDOException $e){    $error = '连接数据库失败,错误代码:<br>' . $e->getMessage();    include 'error.html.php';    exit();}

连接

$pdo = new PDO('mysql:host=localhost;dbname=db_name', 'username', 'password');

异常

PDO在成功连接数据库后,将启用“故障沉默”模式。
我们希望出现任何执行失败后,PDO都会抛出一个PDOException,通过调用PDO对象的setAttribute方法可以配置模式。

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// ATTR_ERRMODE控制错误模式:ERRMODE_EXCEPTION为抛出异常;

字符编码

$pdo->exec('SET NAMES "utf8"');

错误

我们截取Catch中的部分代码,错误信息的设置,首先源于:PDOException类2的$e(类型强制,PHP5的新功能之一),然后在提示中调用了getMessage方法,从服务器回去一条错误信息。

catch(PDOException $e){    $error = '连接数据库失败,错误代码:<br>' . $e->getMessage();

查询

$sql="SELECT name, password FORM user LIMIT 10"

exec方法:

发送SQL代码,执行查询,并返回影响条数。$result = $pdo->exec($sql)

query方法:

返回PDOStatement对象(一个结果集,涵盖了通过查询返回的所有条目的一个列表),可以通过循环来输出。$result = $pdo->query($sql)

fetch方法:

将数据集中的下一行作为一个数组返回,当数据集中无行之后,返回false。

// 可用foreach语句优化while ($row = $result->fetch()){    // process the row}

预处理语句:

(prepared statement)提前发送给数据库一条查询,但并不立刻执行。SQL代码中含有占位符(placeholder),稍后执行查询时,再为占位符供值,PDO会预防占位符的值产生的危险。
预处理语句在建立后,将允许重复使用,如下代码所示:

$sql = 'DELETE FROM joke WHERE jokeid = :id';$s = $pdo->prepare($sql);foreach($result as $row){    $jokeId = $row['id'];    $s->bindValue(':id', $jokeId);    $s->execute();}

prepare方法:

发送SQL语句,要求数据库准备好运行查询,并返回一个PDOStatement对象。

bindValue方法:

属于PDOStatement的方法,目的是发送所缺的值,每次发送一个值。

execute方法:

属于PDOStatement的方法,目的是请求数据库执行最终的查询。

预处理 实例:

$sql = 'INSERT INTO user SET name = "无名氏", password = :password';$s = $pdo->prepare($sql);$s->bindValue(':password', $_POST['password']);$s->execute();

fetchAll方法:

查询整个结果集,并将之存储在一个数组中。针对执行效率较慢的fetch方法。

小玩意

其实PDO除了标准的增删改查,还有一些有趣的东西。

最后插入ID

譬如注册时,我们需要一个最后ID,来完成玩家初始化(在玩家初次进入游戏时,再做这一步更安全),我们肯定会找到它:

// PDO::lastInsertId// 假设情景:新玩家插入完毕,计入日志系统$lastId = $pdo->lastInsertId();plog('系统生成新玩家,ID为' . $lastId);

事务

某些情况下,你想要执行一系列的多个SQL查询,并让它们一次生效,那你就需要用到“事务”(transaction)了。事务允许你将复杂的多个查询操作,当做一组动作来执行,已让其同时生效。
这里仅介绍PDO的事务命令,事务本身则另开一篇文章叙述。

try{    $pdo->beginTransaction();    /* perform a series of queries … */    $pdo->commit();}catch(PDOStatement $e){    $pdo->rollBack();    $error = '执行事务时出错。';    include 'error.html.php';    exit();}

关闭

关闭数据库连接很简洁,只需要$pdo = null;即可。


尾注

本文仅涵盖基础PDO部分,对于未涵盖内容,请参见菜鸟教程(参考资料),或官方手册。

参考资料:
《PHP&MySQL Novice to Ninja》 著者:Kevin Yank
PDO - 菜鸟教程


  1. 在PHP中,PDO默认是开启的。 ↩
  2. PDO共有三种类,PDO 类代表与数据库的一个连接;PDOStatement 类代表查询以及查询结果集;PDOException 异常类意味着一个PDO引发的异常。 ↩
0 0
原创粉丝点击