php pdo函数说明,PHP5中PDO(PHP DATA OBJECT)模块基础详解

本文详细介绍了PHP的PDO(PHP Data Objects)特性,包括如何开启PDO支持、数据库连接、基本数据操作(增删改查)、事务处理以及预处理SQL和存储过程的使用。通过实例代码展示了PDO在MySQL数据库中的应用,强调了PDO作为统一数据库接口的优势和使用方法。
摘要由CSDN通过智能技术生成

PHP5自从2004年发布以来PDO就有了,但是现在纵观周边开发的情况还是4世代的mysql或者mysqli占据大部分江山,就像ie6一样。也许改革需要时间的推动,在即将发行的PHP6中PDO会作为默认的数据库链接工具。这是一个趋势,不管时间需要多久,运用新的技术是技术人员一项基本要素。搜索网上的PHP的PDO不是太多,一般是一些尝试性质的简介,或者概述。总觉得少了点什么。我这里补充下自己的一些实例,让PDO的运用丰满一些。大部分参考官方文档例子。

第一部分:开启PDO支持 这个就不多说了,网上有很多这个文档。总的来说就是windows下开始 extension linux下重新开启支持pdo的编译

第二部分:实例介绍

一:创建链接,PDO作为一个PHP统一的数据库接口,包括了基本上市场上的数据库类型。因为PHP和Mysql一直相互扶持,这里就用Mysql做实例。

define('DB_NAME','wordpress');

define('DB_USER','root');

define('DB_PASSWORD','');

define('DB_HOST','localhost');

define('DB_CHARSET','utf8');

try {

$DBH=newPDO('mysql:host=localhost;dbname=wordpress', DB_USER, DB_PASSWORD);

$DBH->exec('SET CHARACTER SET '.DB_CHARSET);

$DBH->exec('SET NAMES '.DB_CHARSET);

/*

* 如果想要在脚本结束的时候不释放链接那么在参数里面加上array(PDO::ATTR_PERSISTENT => true)不过一般情况下可以不用常链接

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(

PDO::ATTR_PERSISTENT => true

));

*/

} catch (PDOException $e) {

print "Error!: ".$e->getMessage() ."
";

die();

}

二:基本数据操作

/*

* 第二部分:数据库的基本操作 增删改查 这里先说基本的exec和query 函数

*/

//增加数据

$sql_insert='INSERT INTO wp_options(blog_id,option_name,option_value,autoload) VALUES (0,'.time().rand(1,100).','.time().rand(1,100).',\'no\')';

$back=$DBH->exec($sql_insert);//返回 bool 的true or fal

$lastInsertId=$DBH->lastInsertId();

//更新数据

$sql_update='UPDATE wp_options SET option_name = \''.time().rand(1,100).'\' WHERE option_id='.$lastInsertId;

$lastUpdateId=$DBH->lastInsertId();//返回的对应的操作的id

//查询数据

$sql_select='SELECT option_id FROM wp_options ORDER BY option_id DESC LIMIT 4 ';

$back=$DBH->query($sql_select);//返回一个对象 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集

$back=$DBH->query($sql_select)->fetch();//返回一条数据结果 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集

$back=$DBH->query($sql_select)->fetchAll();//返回一个数组 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集

$back=$DBH->query($sql_select)->fetchColumn(0);//返回一个字段字符串,这个字符串是返回的记录的第一条记录的第一个字段

//删除数据

$sql_delete='DELETE FROM wp_options WHERE option_id='.$lastInsertId;

$back=$DBH->exec($sql_delete);//返回 bool 的true or fal

$lastInsertId=$DBH->lastInsertId();

第三部分:事务

/*

* 第三部分 PDO的事务机制 这里已经封装好了 在使用事务的时候最好使用 try 和catch 如果try 返回错误 那么就不会提交的哦

*/

try{

$DBH->beginTransaction();//开启一个事务

//Sql 执行的内容 ......................

$DBH->exec($sql_insert);//执行一系列的操作

$DBH->exec($sql_update);

$DBH->exec($sql_delete);

//等等

$DBH->commit();//如果正确执行完成 那么确认 commit

} catch(Exception $e) {

$DBH->rollBack();//如果执行中有错误的情况下  回滚

}

第四部分:预处理Sql 和 存储过程

/*

* 第四部分 存储过程 和预处理Sql

*/

//预处理Sql PDO 提供了预处理Sql 机制 这样可以重复使用Sql 语句 只要把其中的一些关键的变量每次重新赋值就可以了 这里的变量是引用传递的值

$stmt=$DBH->prepare('INSERT INTO wp_options(blog_id,option_name,option_value,autoload) VALUES (0,:option_name,:option_value,\'no\')');

$option_name=$option_value='';

$stmt->bindParam(':option_name',$option_name);//

$stmt->bindParam(':option_value',$option_value);

// insert one row

$option_name='name'.time();

$option_value='value'.time();

$stmt->execute();

// insert another row with different values

$option_name='name_'.time();

$option_value='value_'.time();

$stmt->execute();

$stmt=$DBH->prepare('INSERT INTO wp_options(blog_id,option_name,option_value,autoload) VALUES (0,?,?,\'no\')');

$option_name=$option_value='';

$stmt->bindParam('1',$option_name);//

$stmt->bindParam('2',$option_value);

// insert one row

$option_name='name'.time();

$option_value='value'.time();

$stmt->execute();

// insert another row with different values

$option_name='name_'.time();

$option_value='value_'.time();

$stmt->execute();

$stmt=$DBH->prepare("SELECT * FROM wp_options where option_id = ?");

if($stmt->execute(array(@$_GET['option_id']))) {

while(@$row=$stmt->fetch()) {

print_r($row);

}

}

//存储过程 关于存储过程的写法,我回头再另一篇文章中详细介绍下。 这里只是简单的提下 以便PDO这个功能的描述

$sql_procedure= '

CREATE PROCEDURE inout_test(

IN in_option_id INT,

OUT out_option_name VARCHAR(255),

OUT out_option_value TEXT

)

BEGIN

SELECT option_name INTO out_option_name   FROM wp_options WHERE option_id = in_option_id;

SELECT option_value INTO out_option_value FROM wp_options WHERE option_id = in_option_id;

END;

';

try{

$sql_drop_procedure='DROP PROCEDURE inout_test';

$back=$DBH->exec($sql_procedure);

//这里发觉现在的这一部分总觉得不是太完善和容易上手,可能个人原因吧 这里还是用原始点的方法 以后如果有新的认知再补充

$sql_call_procedure='CALL inout_test(100,@out_option_name,@out_option_value)';

$DBH->exec($sql_call_procedure);

$sql_select_procedure='SELECT @out_option_name,@out_option_value';

$back=$DBH->query($sql_select_procedure)->fetch();

$back=$DBH->exec($sql_drop_procedure);

}catch(Exception $e){

echo$e->getMessage();

}

这些都是示例 数据库结构是基于wordpress的 wp_options 表来做的测试

表结构如下

CREATETABLEIFNOTEXISTS `wp_options` (

`option_id` bigint(20) unsignedNOTNULLAUTO_INCREMENT,

`blog_id` int(11)NOTNULLDEFAULT'0',

`option_name` varchar(64)NOTNULLDEFAULT'',

`option_value` longtext NOTNULL,

`autoload` varchar(20)NOTNULLDEFAULT'yes',

PRIMARYKEY(`option_id`),

UNIQUEKEY`option_name` (`option_name`)

) ENGINE=InnoDB  DEFAULTCHARSET=utf8 AUTO_INCREMENT=256 ;

这些都是基本的入门的,但是可以满足目前对数据库的操作。剩下的一些PDO的部分看文档不解释,但是现在新手看文档的习惯。也许是造成这个现在还使用范围不大的原因吧。

最后整体来一份code

/**

* 关于PHP5版本引入的PDO(PHP Data Objects)的详细实例使用

*/

/*

*第一部分:数据库链接

*/

define('DB_NAME', 'wordpress');

define('DB_USER', 'root');

define('DB_PASSWORD', '');

define('DB_HOST', 'localhost');

define('DB_CHARSET', 'utf8');

try {

$DBH=newPDO('mysql:host=localhost;dbname=wordpress', DB_USER, DB_PASSWORD);

$DBH->exec('SET CHARACTER SET '.DB_CHARSET);

$DBH->exec('SET NAMES '.DB_CHARSET);

/*

* 如果想要在脚本结束的时候不释放链接那么在参数里面加上array(PDO::ATTR_PERSISTENT=>true)不过一般情况下可以不用常链接

$dbh=newPDO('mysql:host=localhost;dbname=test', $user, $pass, array(

PDO::ATTR_PERSISTENT=>true

));

*/

} catch (PDOException $e) {

print "Error!: " . $e->getMessage() . "
";

die();

}

/*

* 第二部分:数据库的基本操作 增删改查 这里先说基本的exec和query 函数

*/

//增加数据

$sql_insert='INSERT INTO wp_options(blog_id,option_name,option_value,autoload) VALUES (0,'.time().rand(1,100).','.time().rand(1,100).',\'no\')';

$back= $DBH->exec($sql_insert); //返回 bool 的true or fal

$lastInsertId= $DBH->lastInsertId();

//更新数据

$sql_update= 'UPDATE wp_options SET option_name = \''.time().rand(1,100).'\' WHEREoption_id='.$lastInsertId;

$lastUpdateId= $DBH->lastInsertId(); //返回的对应的操作的id

//查询数据

$sql_select='SELECT option_id FROM wp_options ORDER BY option_id DESC LIMIT 4 ';

$back= $DBH->query($sql_select); //返回一个对象 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集

$back= $DBH->query($sql_select)->fetch(); //返回一条数据结果 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集

$back= $DBH->query($sql_select)->fetchAll(); //返回一个数组 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集

$back= $DBH->query($sql_select)->fetchColumn(0); //返回一个字段字符串,这个字符串是返回的记录的第一条记录的第一个字段

//删除数据

$sql_delete='DELETE FROM wp_options WHERE option_id='.$lastInsertId;

$back= $DBH->exec($sql_delete); //返回 bool 的true or fal

$lastInsertId= $DBH->lastInsertId();

/*

* 第三部分 PDO的事务机制 这里已经封装好了 在使用事务的时候最好使用 try 和catch 如果try 返回错误 那么就不会提交的哦

*/

try{

$DBH->beginTransaction();//开启一个事务

//Sql 执行的内容 ......................

$DBH->exec($sql_insert); //执行一系列的操作

$DBH->exec($sql_update);

$DBH->exec($sql_delete);

//等等

$DBH->commit(); //如果正确执行完成 那么确认 commit

} catch(Exception $e) {

$DBH->rollBack();//如果执行中有错误的情况下  回滚

}

/*

* 第四部分 存储过程 和预处理Sql

*/

//预处理Sql PDO 提供了预处理Sql 机制 这样可以重复使用Sql 语句 只要把其中的一些关键的变量每次重新赋值就可以了 这里的变量是引用传递的值

$stmt= $DBH->prepare('INSERT INTO wp_options(blog_id,option_name,option_value,autoload) VALUES (0,:option_name,:option_value,\'no\')');

$option_name= $option_value='';

$stmt->bindParam(':option_name', $option_name); //

$stmt->bindParam(':option_value', $option_value);

// insert one row

$option_name='name'.time();

$option_value='value'.time();

$stmt->execute();

// insert another row with different values

$option_name='name_'.time();

$option_value='value_'.time();

$stmt->execute();

$stmt= $DBH->prepare('INSERT INTO wp_options(blog_id,option_name,option_value,autoload) VALUES (0,?,?,\'no\')');

$option_name= $option_value='';

$stmt->bindParam('1', $option_name); //

$stmt->bindParam('2', $option_value);

// insert one row

$option_name='name'.time();

$option_value='value'.time();

$stmt->execute();

// insert another row with different values

$option_name='name_'.time();

$option_value='value_'.time();

$stmt->execute();

$stmt= $DBH->prepare("SELECT * FROM wp_options whereoption_id= ?");

if ($stmt->execute(array(@$_GET['option_id']))) {

while (@$row= $stmt->fetch()) {

print_r($row);

}

}

//存储过程 关于存储过程的写法,我回头再另一篇文章中详细介绍下。 这里只是简单的提下 以便PDO这个功能的描述

$sql_procedure= '

CREATE PROCEDURE inout_test(

IN in_option_id INT,

OUT out_option_name VARCHAR(255),

OUT out_option_value TEXT

)

BEGIN

SELECT option_name INTO out_option_name   FROM wp_options WHERE option_id=in_option_id;

SELECT option_value INTO out_option_value FROM wp_options WHERE option_id=in_option_id;

END;

';

try{

$sql_drop_procedure='DROP PROCEDURE inout_test';

$back= $DBH->exec($sql_procedure);

//这里发觉现在的这一部分总觉得不是太完善和容易上手,可能个人原因吧 这里还是用原始点的方法 以后如果有新的认知再补充

$sql_call_procedure='CALL inout_test(100,@out_option_name,@out_option_value)';

$DBH->exec($sql_call_procedure);

$sql_select_procedure='SELECT @out_option_name,@out_option_value';

$back= $DBH->query($sql_select_procedure)->fetch();

$back= $DBH->exec($sql_drop_procedure);

}catch(Exception $e){

echo $e->getMessage();

}

如果有问题的可以留言或者自己看官方手册

http://cn.php.net/manual/zh/book.pdo.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值