基础级-PDO

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

前述

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类型的$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方法。

事务

某些情况下,你想要执行一系列的多个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默认是开启的。 ↩

你可能感兴趣的:(PHP,数据库,pdo)