PDO(PHP Data Object)在旧版PHP中无法使用,将在未来取代繁杂的数据库接口。
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"
发送SQL代码,执行查询,并返回影响条数。$result = $pdo->exec($sql)
返回PDOStatement对象(一个结果集,涵盖了通过查询返回的所有条目的一个列表),可以通过循环来输出。$result = $pdo->query($sql)
将数据集中的下一行作为一个数组返回,当数据集中无行之后,返回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();
}
发送SQL语句,要求数据库准备好运行查询,并返回一个PDOStatement对象。
属于PDOStatement的方法,目的是发送所缺的值,每次发送一个值。
属于PDOStatement的方法,目的是请求数据库执行最终的查询。
预处理 实例:
$sql = 'INSERT INTO user SET name = "无名氏", password = :password';
$s = $pdo->prepare($sql);
$s->bindValue(':password', $_POST['password']);
$s->execute();
查询整个结果集,并将之存储在一个数组中。针对执行效率较慢的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 - 菜鸟教程