php课程---php使用PDO方法详解(转)
本文详细分析了php使用PDO方法。分享给大家供大家参考。具体分析如下:
PDO::exec:返回的是int类型,表示影响结果的条数.
代码如下:
PDOStatement::execute
返回的是boolean型,true表示执行成功,false表示执行失败,这两个通常出现在如下代码:
代码如下:
$rs0 = $pdo->exec($sql);
$pre = $pdo->prepare($sql);
$rs1 = $pre->execute();
一般情况下可以用$rs0的值判断SQL执行成功与否,如果其值为false表示SQL执行失败,0表示没有任何更改,大于0的值表示影响了多少条记录.
但是$rs1只能返回SQL执行成功与否,如果需要获取影响的记录数需要使用$pre->rowCount();
我个人喜欢使用 MySQL,所以我的 extensions.ini 中有这二行.
代码如下:
extension=pdo.so
extension=pdo_mysql.so
接着在程式中,代码如下:
代码如下:
define('DB_NAME','test');
define('DB_USER','test');
define('DB_PASSWD','test');
define('DB_HOST','localhost');
define('DB_TYPE','mysql');
$dbh = new PDO(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWD);
文中的使用常数设定是我个人的习惯,各位不用像我这么麻烦,当像上面的操作,$dbh 本身就是代表了PDO的连线了,那要怎样使用PDO呢? 第一种,懒人法 query,什么都不用想,像平常一样的使用 query 的函式,代码如下:
代码如下:
$sql = 'select * from test';
foreach ( $dbh->query($sql) as $value)
{
echo $value[col];
};
第二种,自动带入法 prepare,我个人使用PDO后,偏好利用 prepare 的函式来进行作动 prepare 的好处是可以先写好 SQL 码,并且在稍后自动带入我们要的资料. 这个我想最大的好处是比起直接利用 query 可以减少许多安全性的问题,首先,我们利用 prepare 进行 SQL 码的设定,在利用bindparm 来进行设定的动作,代码如下:
代码如下:
$sth = $dbh->prepare('update db set zh_CN= :str where SN=:SN');
$sth->bindParam(':str',$str,PDO::PARAM_STR,12);
$sth->bindParam(':SN',$SN);
$sth->execute();
请注意文中的 :str 及 :SN,当我们利用 bindParam的函式,可以利用 :word 来指定系统需要套用的部份,像是我们利用:str 及 :SN 来指定,而实际的内容,就靠bindParam还可以指定我们要输入的型态。
首先我们先看 :str 的指定,:str 由於我确定资料是属於文字,因此利用 PD::PARAM_STR 来告诉程式“这个是字串哟”,并且给一个范围,也就是长度是12个位元。
我们也可以不要那么复杂,像 :SN,虽然也是用 bindParam 来指定,但是我们省略了型态及长度,PHP 会用该变数预设的型态来套用.
最后呢,就是利用 $sth->execute(); 来进行执行的动作,基本上不难,甚至可以说很简单呢.
如果你有大量需要重复套用的资料,你就可以拼了命的重新利用 bindParam 来指定,比如我的:str 及 :SN 如果有十笔资料,我也可以这样子直接新增到资料库,代码如下:
代码如下:
$sth = $dbh->prepare('insert into db ("zh_CN","zh_TW")values(:str , :SN');
foreach ($array => $value )
{
$sth->bindParam(':str',$value[str],PDO::PARAM_STR,12);
$sth->bindParam(':SN',$value[SN]);
$sth->execute();
}
甚至强者如我朋友,把所有可能的 SQL 全写在一个档案后面,后来的过程SQL的部份就变成全用变数带进去了,反正资料可以用现成的方式套用嘛. 那,如果利用 prepare 的方式来 select,关键字当然也可以像上面的方式利用:word 来指定,代码如下:
代码如下:
$sth = $dbh->prepare('select * from db where SN = :SN');
$sth->bindParam(':SN',$value[SN]);
$sth->execute();
while($meta = $sth->fetch(PDO::FETCH_ASSOC))
{
echo $meta["name"];
}
这样新出现的是 fetch,跟mysql_fetch_row() 的意思差不多,但是在 fetch() 中我们发现多了一个 PDO::FETCH_ASSOC 这个东西.
fetch() 提供了许多获取资料的方式,而 PDO::FETCH_ASSOC 指的就是传回下一笔资料的栏位名及值啦
比如上例,利用 $meta 来取得 fetch 传回的资料,此时 $meta 的元素名称就是资料库的栏位名称,而内容当然就是值本身这个跟你利用 mysql_fetch_row() 时不一样,因为除了栏位名称,mysql_fetch_row() 还会依照顺利将元素名称除了栏位外在多给予一个以序号的方式为基础的元素,那难道 PDO 没有吗?
当然有,只要将 PDO::FETCH_ASSOC 改为 PDO::FETCH_BOTH,那用法就跟 mysql_fetch_row() 没什么两样了.
如何除错
除错是所有程式设计师中心中永远的痛,我们使用 PDO 要如何除错呢?
其实 PDO 已经提供了二个非常方便的函式 errorInfo() 及 errorCode()
用法也是世界简单,每当我们利用 execute() 执行后,如果有错误,那 errorInfo() 及 errorCode() 中就会有内容,我们就可以这样子做,代码如下:
代码如下:
$sth = $dbh->prepare('select * from db where SN = :SN');
$sth->bindParam(':SN',$value[SN]);
$sth->execute();
if ($sth->errorCode())
{
echo "有错误!有错误!";
print_r($sth->errorInfo());
}
而 $sth->errorInfo() 会是一个阵列,这个阵列有三个值:
0 为SQLSTATE error code
1 为你所使用的 Driver 所传回的错误码
2 为你所使用的 Driver 所传回的错误讯息
php课程---php使用PDO方法详解(转)的更多相关文章
- php使用PDO方法详解
PDO::exec:返回的是int类型,表示影响结果的条数. 复制代码 代码如下: PDOStatement::execute 返回的是boolean型,true表示执行成功,false表示执行失败, ...
- PHP PDO prepare()、execute()和bindParam()方法详解
每次将查询发送给MySQL服务器时,都必须解析该查询的语法,确保结构正确并能够执行.这是这个过程中必要的步骤,但也确实带来了一些开销.做一次是必要的,但如果反复地执行相同的查询,批量插入多行并只改变列 ...
- js课程 1-3 Javascript变量类型详解
js课程 1-3 Javascript变量类型详解 一.总结 一句话总结:js对象点(属性方法),json对象冒号(属性方法).属性和方法区别只有一个括号. 1.json对象中的函数的使用? 函数名 ...
- session的使用方法详解
session的使用方法详解 Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每个用户首次与这台WWW服务器 ...
- Kooboo CMS - Html.FrontHtml[Helper.cs] 各个方法详解
下面罗列了方法详解,每一个方法一篇文章. Kooboo CMS - @Html.FrontHtml().HtmlTitle() 详解 Kooboo CMS - Html.FrontHtml.Posit ...
- HTTP请求方法详解
HTTP请求方法详解 请求方法:指定了客户端想对指定的资源/服务器作何种操作 下面我们介绍HTTP/1.1中可用的请求方法: [GET:获取资源] GET方法用来请求已被URI识别的资源.指定 ...
- ecshop后台增加|添加商店设置选项和使用方法详解
有时候我们想在Ecshop后台做个设置.radio.checkbox 等等来控制页面的显示,看看Ecshop的设计,用到了shop_config这个商店设置功能 Ecshop后台增加|添加商店设置选项 ...
- (转)Spring JdbcTemplate 方法详解
Spring JdbcTemplate方法详解 文章来源:http://blog.csdn.net/dyllove98/article/details/7772463 JdbcTemplate主要提供 ...
- C++调用JAVA方法详解
C++调用JAVA方法详解 博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...
随机推荐
- RecyclerView 介绍 01
RecyclerView是Android support v7里面是一个自定义控件.用来显示大量数据集合.类似ListView和GridView这两个控件,RecyclerView同样可以实现,甚至更 ...
- hdu1010 dfs+奇偶性减枝
Tempter of the Bone Problem Description The doggie found a bone in an ancient maze, which fascinated ...
- ember.js:使用笔记1-数组数据统一显示
ember中数据一般都是以array的形式存储的,控制器使用,如: App.DataController = Em.ArrayController.extend({}); 想要在一个页面中输出所有的数 ...
- vs2010 安装MVC 3.0
下载链接如下: MVC 3安装包:http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=d2928bc1-f48c-4e95-a ...
- iOS Xcode个人常用插件
1.AdjustFontSize 按command +/-进行字体大小调整 2.ATProperty @property专用,strong.assign.copy.weak IBOutlet 3.Ba ...
- ural 1346. Intervals of Monotonicity
1346. Intervals of Monotonicity Time limit: 1.0 secondMemory limit: 64 MB It’s well known that a dom ...
- Extjs 属性控件[转载]
Ext.form.TimeField: 配置项: maxValue:列表中允许的最大时间 maxText:当时间大于最大值时的错误提示信息 ...
- 在Web应用中接入微信支付的流程之极简清晰版 (转)
在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...
- 使用Adobe Edge Inspect在各种设备中轻松测试同一页面
有过移动网站开发经历的开发者都知道,在各种设备中测试同一页面是一项非常繁琐的工作.现在,我们可以使用Adobe Edge Inspect来简化这一工作.如果使用Edge Inspect,可以在各种设备 ...
- tornado 学习笔记2 Python web主流框架
2.1 Django 官方网址:https://www.djangoproject.com/ 简介:Django is a high-level Python Web framework that e ...