P站长工具很多雪花代码-HP5中PDO的简朴应用_PHP教程

作者 : 共6409个字,阅读需17分钟。
点击购买本站资源可以说是全网最低价,为了换一个更好的服务器,提供更好的服务,开启了极品资源区,极品资源区都是我们花高价购买获得。
前往极品资源区
极品资源区仅限超级会员以上的权限免费使用,永久会员不可下载使用。我们也需要盈利以便更好的发展,白嫖大师就别耽误大家时间了。极品资源区内容不多,但是质量绝无仅有!!!!
PDO(PHP Data Object) 是PHP 5最新进去的工具,正在PHP 6皆要进去的时辰,PHP 6只默许应用PDO去处置数据库,将把一切的数据库扩大移到了PECL,那末默许便是出有了咱们爱好的php_mysql.dll之类的了,那怎样办捏,咱们只要取时俱进了,我便小试了一把PDO。(本文只是进门级的,妙手能够略过,呵呵)

【PDO是啥】

PDO是PHP 5最新插手的一个严重功用,由于正在PHP 5之前的php4/php3皆是一堆的数据库扩大去跟各个数据库的毗连战处置,甚么 php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等扩大去毗连MySQL、PostgreSQL、MS SQL Server、SQLite,一样的,咱们必需借助 ADOdb、PEAR::DB、PHPlib::DB之类的数据库笼统类去帮忙咱们,没有比啰嗦战低效,究竟结果,php代码的效力怎样可以或许咱们间接用C/C++编辑的扩大斜率下捏?因此嘛,PDO的呈现是必定的,年夜家要安静进修的心态往接管应用,或许您会发明可以或许削减您很多工夫哦。

【装置PDO】

我是正在Windows XP SP2 下面,因此嘛,全部进程皆是正在Windows止停止的啦,至于Linux/FreeBSD 等仄台,请自止查找材料配置装置。
我的是PHP 5.1.4,已自带有了php_pdo.dll的扩大,不外要求略微配置一下才气应用。

翻开 c:/windows/php.ini ,那是我的PHP设置装备摆设文件,找到上面那止:

extension_dir

那个便是咱们扩大存正在的目次,我的PHP 5扩大是正在:C:/php5/ext,那末我便把那止改为:

extension_dir = "C:/php5/ext"

而后再往php.ini上面找到:

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;

上面有一堆近似 ;extension=php_mbstring.dll 的工具,那里便是PHP扩大减载的设置装备摆设了,咱们再最初里增加上咱们PDO的扩大:

extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
extension=php_pdo_mssql.dll
extension=php_pdo_odbc.dll
extension=php_pdo_firebird.dll
;extension=php_pdo_oci8.dll

各类PDO的驱动,能给减上的齐给减上,不外前面的php_pdo_oci8.dll,由于我出有装置Oralce数据库,因此出有那个,便应用分号正文失落它。而后重启咱们的Web办事器, IIS/Apache,我的是IIS,嘿嘿,表鄙夷我,正在Windows上,简朴嘛。

重启后,正在咱们Web办事器的文档目次下编辑一个phpinfo.php的文件,减上那些:

phpinfo();
?>

而后翻开咱们心爱的阅读器:IE/FireFox,我的是FireFox 2.0,刚下载的,很爽,没有怕地痞硬件,哈哈。

正在阅读器内里输出:http://localhost/phpinfo.php,若是您的那个页里途径纷歧致,请自止输出。

输入的文章中,若是您可以或许顺遂的见到:

PDO
PDO support enabled
PDO drivers mysql, pgsql, sqlite, mssql, odbc, firebird

前面有各类驱动的讲明:PDO_Firebird,pdo_mssql,pdo_mysql,PDO_ODBC,pdo_pgsql,pdo_sqlite

那末,祝贺您装置胜利了,不然请细心查抄下面的流程。

【牛刀小小试】

我用的是MySQL 4.0.26,可是我小我保举年夜家应用 MySQL 4.1.x 或 MySQL 5.0.x,由于那些版本有良多风趣的工具值患上往进修。咱们那里PDO要求毗连的便是我的MySQL 什么是站长工具seo4.0啦,若是您出有装置MySQL,请自止装置。咱们成立好了MySQL,而且正在test库里增加了表foo,包罗 id,name,gender,time等四个字段。

咱们起头机关第一个PDO利用,成立一个pdo.php文件正在Web文档目次下:

$dsn = "mysql:host=localhost;dbname=test";
$db = new PDO($dsn, 'root', '');
$count = $dseo关键词词库工具b->exec("INSERT INTO foo SET name = 'heiyeluren',gender='男',time=NOW()");
echo $count;
$db = null;
?>

没有大白啥意义,俺们去渐渐讲讲。那止:

$dsn = "mysql:host=localhost;dbname=test";

便是机关咱们的DSN(数据源),看看内里的疑息包罗:数据库范例是mysql,主机地点是localhost,数据库称号是test,便那么好多个疑息。分歧数据库的数据源机关体例是纷歧样的。

$db = new PDO($dsn, 'root', '');

初初化一个PDO工具,机关函数的参数第一个便是咱们的数据源,第两个是毗连数据库办事器的用户,第三个参数是暗码。咱们不克不及确保毗连胜利,前面咱们会讲到非常环境,那里咱们临时以为它是毗连胜利的。

$count = $db->exec("INSERT INTO foo SET name = 'heiyeluren',gender='男',time=NOW()");
echo $count;

挪用咱们毗连胜利的PDO工具去履行一个查问,那个查问是一个拔出一笔记录的操纵,应用PDO::exec() 方式会前往一个影响记实的成果,因此咱们输入那个成果。最初仍是要求竣事工具资本:

$db = null;

默许那个没有是少毗连,若是要求数据库少毗连,要求最初减一个参数:array(PDO::ATTR_PERSISTENT => true) 酿成如许:

$db = new PDO($dsn, 'root', '', array(PDO::ATTR_PERSISTENT => true));

一次操纵便那么简朴,或许跟之前的出有太年夜区分,跟ADOdb却是有多少分类似。

【持续领会】

若是咱们念提与数据的话,那末便应当应用数据获得功用。(上面用到的$db皆是下面已毗连好的工具)

foreach($db->query("SELECT * FROM foo")){
print_r($row);
}
?>

咱们也能够应用这类获得体例:

$rs = $db->query("SELECT * FROM foo");
while($row = $rs->fetch()){
print_r($row);
}
?>

若是念一次把数据皆获得到数组里能够如许:

$rs = $db->query("SELECT * FROM foo");
$result_arr = $rs->fetchAll();
print_r($result_arr);
?>

Array
([0] => Array(
[id] => 1
[0] => 1
[name] => heiyeluren
[1] => heiyeluren
[gender] => 男
[2] => 男
[time] => 2006-10-28 23:14:23
[3] => 2006-10-28 23:14:23
)
}

咱们看内里的记实,数字索引战联系关系索引皆有,华侈资本,咱们只要要联系关系索引的:

$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
$rs = $db->query("SELECT * FROM foo");
$rs->setFetchMode(PDO::FETCH_ASSOC);
$result_arr = $rs->fetchAll();
print_r($result_arr);
?>

看下面的代码,setAttribute() 方式是配置部门属性,首要属性有:PDO::ATTR_CASE、PDO::A天津seo点击工具TTR_ERRMODE等等,咱们那里要求配置的是PDO::ATTR_CASE,便是咱们应用联系关系索引获得数据散的时辰,联系关系索引是年夜编辑仍是小编辑,有好多个挑选:

PDO::CASE_LOWER -- 强迫列名是小编辑
PDO::CASE_NATURAL -- 列名依照本初的体例
PDO::CASE_UPPER -- 强迫列名为年夜编辑

咱们应用setFetchMode方式去配置获得成果散的前往值的范例,一样范例借有:

PDO站长工具熊掌号::FETCH_ASSOC -- 联系关系数组情势
PDO::FETCH_NUM -- 数字索引数组情势
PDO::FETCH_BOTH -- 二者数组情势皆有,那是缺省的
PDO::FETCH_OBJ -- 依照工具的情势,近似于之前的 mysql_fetch_object()

固然,普通环境下咱们是应用PDO::FETCH_ASSOC,详细应用甚么,依照您本身的要求,其余获得范例参考脚册。

除开下面这类获得数据的体例,借有这类:

$rs = $db->prepare("SELECT * FROM foo");
$rs->execute();
while($row = $rs->fetch()){
print_r($row);
}
?>

实在好未几啦。若是您念获得指定记实里一个字段成果的话,可使用 PDOStatement::fetchColumn():

$rs = $db->query("SELECT COUNT(*) FROM foo");
$col = $rs->fetchColumn();
echo $col;
?>

普通应用fetchColumn()去停止count统计或某些只要要单字段的记实很好操纵。

简朴的汇总一下下面的操纵:

查问操纵首要是PDO::query()、PDO::exec()、PDO::prepare()。PDO::query()首要是用于有记实成果前往的操纵,出格是SELECT操纵,PDO::exec()首要是应对出有成果调集前往的操纵,好比INSERT、UPDATE、DELETE等操纵,它前往的成果是以后操纵影响的列数。PDO::prepare()首要是预处置操纵,要求经由过程$rs->execute()去履行预处置内里的SQL语句,那个方式能够绑定参数,功用比力壮大,没有是本文可以或许简朴讲大白的,年夜家能够参考脚册战其余文档。 获得成果散操纵首要是:PDOStatement::fetchColumn()、PDOStatement::fetch()、PDOStatement::fetchALL()。PDOStatement::fetchColumn() 是获得成果指定第一笔记录的某个字段,缺省是第一个字段。PDOStatement::fetch() 是用去获得一笔记录,PDOStatement::fetchAll()是获得一切记实散到一其中,获得成果能够经由过程PDOStatement::setFetchMode去配置要求成果调集的范例。

别的有两个周边的操纵,一个是PDO::lastInsertId()战PDOStatement::rowCount()。PDO::lastInsertId()是前往前次拔出操纵,主键列范例是自删的最初的自删ID。PDOStatement::rowCount()首要是用于PDO::query()战PDO::prepare()停止DELETE、INSERT、UPDATE操纵影响的成果散,对于PDO::exec()方式战SELECT操纵没有效。

【毛病处置】

若是法式中碰着毛病咋办?咱们那里描写PDO类的毛病疑息战非常处置。

1. 里背工具的体例

先看看若是毗连毛病等的处置,应用里背工具的体例去处置:

try {
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$db = null;
} catch (PDOException $e) {
print "Error: " . $e->getMessage() . "
";
die();
}
?>

那里操纵咱们PHP 5里背工具的非常处置特点,若是内里有非常的话便初初化挪用PDOException去初初化一个非常类。

PDOException非常类的属性布局:

class PDOException extends Exception
{
public $errorInfo = null; // 毛病疑息,能够挪用 PDO::errorInfo() 或者 PDOStatement::errorInfo()去拜候
protected $message; // 非常疑息,能够试用 Exception::getMessage() 去拜候
protected $code; // SQL状况毛病代码,可使用 Exception::getCode() 去拜候
}
?>

那个非常处置类是散成PHP 5内置的非常处置类,咱们简朴的看一下PHP 5内置的非常处置类布局:

class Exception
{
// 属性
protected $message = 'Unknown exception'; // 非常疑息
protected $code = 0; // 用户自界说非常代码
protected $file; // 产生非常的文件名
protected $line; // 产生非常的代码止号

// 方式
final function getMessage(); // 前往非常疑息
final function getCode(); // 前往非常代码
final function getFile(); // 前往产生非常的文件名
final function getLine(); // 前往产生非常的代码止号
final function getTrace(); // backtrace() 数组
final function getTraceAsString(); // 已经格成化成字符串的 getTrace() 疑息
}
?>

响应的,正在代码中能够适合的挪用 getFile() 战 getLine() 去停止毛病定位,更便利的停止调试。

2. 应用里背进程的方式

先看代码:

$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$rs = $db->query("SELECT aa,bb,cc FROM foo");
if ($db->errorCode() != '00000'){
print_r($db->errorInfo());
exit;
}
$arr = $rs->fetchAll();
print_r($arr);
$db = null;
?>

PDO战PDOStatement工具有errorCode() 战 errorInfo() 方式,若是出有任何毛病, errorCode() 前往的是: 00000 ,不然便会前往一些毛病代码。errorInfo() 前往的一个数组,包罗PHP界说的毛病代码战MySQL的毛病代码战毛病疑息,数组布局以下:

Array
(
[0] => 42S22
[1] => 1054
[2] => Unknown column 'aaa' in 'field list'
)

每一次履行查问今后,errorCode() 的成果皆是最最新的,因此咱们能够很轻易本身节制毛病疑息显现。

【简朴汇总】

从下面的应用看出,PDO功用确切壮大,别的借有一些文章我出有讲到,好比绑定参数、预处置、存储进程、事件处置等等功用。别的借有分歧数据扩 DSN的机关,Oracle数据库本身良多特别的工具,皆要求深切往进修了解,那篇文章便只是简朴的描写了一些进门常识,算是对于PDO一个简朴的领会吧。

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
幽灵米只做资源收集整理,如需商用请联系原作者购买版权。
幽灵米 » P站长工具很多雪花代码-HP5中PDO的简朴应用_PHP教程