html代码

oci.dll下载用于 Oracle 的 PDO,在数据库预编写翻译代码推行的时候现身差距

22 3月 , 2020  

PDO 是透过 PECL,即 PHP 扩充库提供的。假设您在运营 Linux
Computer,请依照下边包车型大巴辨证举行设置;稍后是在 Windows 上安装的详细消息。

以下是一些测验。注意里面包车型客车SQL和for也许foreach语句!
测量检验1(用key值举办绑定卡塔尔(قطر‎
复制代码 代码如下:
$stmt = $dbh->prepare(‘select * from t1 where name=:name’);
$params = array();
$params[‘name’] = ‘rentao’;
foreach($params as $k=>$v){
$stmt->bindParam($k, $v);
}
$stmt->execute();
$item = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
var_dump($row);
}
$stmt = null;
$dbh = null;

PDO 意在令使用可移植 SQL
的脚本运营突出、可移植。本文中聊到的兼具查询在选择别的 PDO
驱动程序时其运行质量应该同等 - 包罗全数绑定输入变量和绑定输出列。

PHP 5.1.* PHP 5.2.*
执行到$stmt->execute()时,进程一直处于等待状态中 执行正常:打印不出结果

$stmt = $dbh->prepare(“SELECT extension, name from CREDITS”);if
{while {print_r; }}

代码
数据库连接代码都同样.
复制代码 代码如下:
$protol = ‘mysql:host=localhost;dbname=test’;
$username = ‘monty’;
$passwd = ‘0818’;
$dbh = new PDO($protol, $username, $passwd);

现行自家要描述一些技术,假如你须要最终再调动一下本子质量的话,这个技能大概会对你有所支持。但先给您叁个忠告:要像逃避瘟疫一样制止不成熟的优化。您应该总是首选最清楚、可维护性最佳的化解方案。请记住,在叁个天下无敌的
Web
应用程序中,您不能够衡量各样抓取方式间的分别,除非脚本要拍卖超多行。笔者再另行一回:抓取形式间的习性差异十分小- 请使用最切合你代码的形式。

总结
PHP在使用PDO做数据库预编写翻译操作的时候,尽量制止使用limit, order by, group
by
做预编写翻译管理。绑定变量大家尽量采用统一标准,要不然都选用“?”,要不然使用“:key”。

在各个差异的数额扩大(oci、mysql、postgresql、mssql
等)之间历来未有真的的一致性,以致在一些情形下,在这里些扩展内部也还没有真正的一致性。大致具备这一个扩大都在接受与底子数据库
API
紧凑相连的两样代码达成着相仿等级次序的天职。并且因为大家的人口非常有限,由此那就以致了代码越发难以维护,从而为
PHP 带给了相当大的标题。

PHP 5.2.*

在上述二种景况下,都急需首先调用“pear
install”;上述示范中的版本号在本文编写之时是风靡的,但随着开拓的一连开交易会产生变化。

测试3(limit绑定:page)
复制代码 代码如下:$stmt =
$dbh->prepare(‘select * from t2 where name=:name limit :page’);
$params = array();
$params[‘name’] = ‘rentao’;// 这里加不加”:”都能得逞实施
$params[‘page’] = 2;
foreach($params as $k=>$v){
$stmt->bindParam($k, $v);
}
$stmt->execute();
echo “HERE1n”;
$item = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
var_dump($row);
}
echo “HERE2n”;
$stmt = null;
$dbh = null;

?>

复制代码 代码如下:
$stmt = $dbh->prepare(‘select * from t1 where name=:name limit
2’);
$params = array();
$params[] = ‘rentao’;// 这里加不加”:”都能得逞推行

Unix/Linux 安装

PHP 5.1.* PHP 5.2.*
打印出结果,但未按order by进行排序 执行正常:打印不出结果

编辑 php.ini 文件时,有一点很要紧,即要在别的别的 PDO 驱动程序在此以前先加载
PDO 扩张,不然就无法准确开始化。

进行常规

// Create a test table to hold the data from
credits.csv$dbh->exec(“CREATE TABLE CREDITS (extension varchar,name
varchar;

结论:

while ($row = $stmt->fetch {echo “Extension {$row->EXTENSION} by
{$row->NAME}
“;}

介绍
后天察觉php5.1.*和php5.2.*在数据库预编写翻译代码执行的时候现身行反革命差。
预编写翻译优点
1.运用占位符,制止逐字输入数据到SQL中。自动管理引号和反斜线等字符的转义——扩展安全性。
2.预先“准备”一条语句,然后在历次实行时绑定分化值到达重用的指标。——常用于未来被频仍实践的语句。
3.可读性强。

假若结果聚焦的某列包蕴多少个 NULL 值,PDO 则会将其映射为 PHP null
值。Oracle 在将数据重临 PDO 时会将空字符串转变为 NULL,然而 PHP
帮忙的其他其他数据库都不会这样管理,从而引致了可移植性难点。PDO
提供了三个使得程序级属性
PDO_ATTR_ORACLE_NULLS,该属性会为别的数据驱动程序模拟此行为:

实用的指令,笔者在php5.1.*拓宽测量检验,测量试验完了,我透过scp把文件传输到php5.2.*服务器上
复制代码 代码如下:scp -P9888 index.php
rentao@192.168.10.4:/home/rentao

一旦您以前不曾尝试过 PHP 5,则请花一点时日来通读一下“音信”和各类申明。在
UNIX Computer上,您或者要安装或晋级 libxml2;如果未有libxml2,“pear”程序包管理工科具就无法运行,您安装 PDO
时就能遇见不菲勤奋。获取 PHP 5,并将其编写翻译和设置。确定保证钦赐的前缀不是
/usr/local/,那样它就不会与 PHP 4 安装产生冲突了:

结论:

譬如你使用 PDO
时境遇难题,也许针对少数特征存在疑问,大概持有特色要求,请联系
pecl-dev@lists.php.net。即使你愿意,当然还能一贯关系我,可是请介意,小编每日都会选用多量关于 PHP
的电子邮件;您或许会意识只要首先与后边的邮件列表联系会更加快获得回复。

假使把”:name”改成”?”,那么七个本子都能够顺遂实行。

荒谬和错误处理

测量检验4(在limit下进行预编写翻译操作:page卡塔尔(قطر‎——使用“?”机制运作
复制代码 代码如下:
$stmt = $dbh->prepare(‘select * from t2 where name=? limit ?’);
$params = array();
$params[] = ‘rentao’;
$params[] = 2;
for($i=0,$iLen = count($params); $i < $iLen; $i++){
$k = $i+1;
$stmt->bindParam($k, $params[$i]);
}
$stmt->execute();
$item = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
var_dump($row);
}
$stmt = null;
$dbh = null;

请小心,PDO
及其驱动程序当前高居“alpha”状态;那就象征大家晤面理保险未有主要缺欠,可是该程序包成效并不周详-
大家还要加上超级多功力。就算大家勉力你测量检验该程序包,不过实际不引入在时下将其用来生产。

执行例行

数据类型

出现错误:“PHP Warning:  PDOStatement::execute(卡塔尔(قطر‎: SQLSTATE[HY093]:
Invalid parameter number: parameter was not defined”

$stmt = $dbh->prepare(“INSERT INTO CREDITS VALUES
;$stmt->execute(array(‘:extension’ => $extension, ‘:name’ =>
$name));

$params[‘name’] = ‘rentao’
和$params[‘:name’]=’rentao’那八个都能实行,表达不受“:”节制。

连接管理

for($i=0,$iLen = count($params); $i < $iLen; $i++){
$k = $i+1;
$stmt->bindParam($k, $params[$i]);
}
echo “HERE1n”;
$stmt->execute();
echo “HERE2n”;

假诺你身处防火墙的前面,则在采用 pear
安装程序获取程序包时或许会遇见一些难点。借使产生这种情况,则足以遵照下列表达手动下载并安装那个程序包:

结论:

亟待 PHP:5.0亟需任何:Oracle 8 或更加高版本顾客端库下载用于 Oracle 的 PDO
:php_pdo.dll, php_pdo_oci.dll下载用于 Oracle 的 PDO :pdo, pdo_oci

测试5—order by)

归拢错误代码表当前席卷下列常量:
PDO_ERR_NONE、PDO_ERR_CANT_MAP、PDO_ERR_SYNTAX、PDO_ERR_CONSTRAINT、PDO_ERR_NOT_FOUND、PDO_ERR_ALREADY_EXISTS、PDO_ERR_NOT_IMPLEMENTED、PDO_ERR_MISMATCH、PDO_ERR_TRUNCATED、PDO_ERR_DISCONNECTED。

$item = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
var_dump($row);
}
$stmt = null;
$dbh = null;

防火墙碍事了?

无法同不常候利用三种标识。如 select * from t2 where name=? limit :page

PDO
在某种程度上体系不可以看到,由此它向往将数据表示为字符串,并不是将其转移为整数或双精度类型。那个时候你也许对此有些吸引,可是原因很简单:字符串类型是最可相信的品种,在
PHP
中持有最广大的运用范围;太早地将数据调换为整数要么双精度类型大概会形成截断或舍入错误。通过将数据以字符串抽取,PDO
为你提供了有个别脚本决定,您能够应用普通的 PHP
类型转换工具来支配什么进展调换以致几时实行调换。

推行符合规律

$stmt->bindParam(‘:extension’, $extension, PDO_PARAM_STR,
64);$stmt->bindParam(‘:name’, $name, PDO_PARAM_STR, 64);

PHP 5.2.*

请留意,与警示或极其比较,静默形式针对运转时不当使用的财富最少,然而为了获取该速度,您就义了部分轻易性,而变得有一些繁缛。

PHP 5.1.*

% php -m

测验2(数字下标去绑定,不过绑定的起首参数是1State of Qatar——”:key”在php5.2.*上不可能用数字下标绑定

PDO 简介

PHP 5.1.* PHP 5.2.*
执行正常 执行正常:打印不出结果

但不幸的是,并不是每种数据库代理商都扶持事务管理,並且因为 PDO
目的在于以一种对峙可移植的办法帮助那么些事务处理,所以它暗许景况下以机关提交方式运营。启用自动提交情势后,数据库驱动程序会隐式提交各类成功的换代。当你调用
$dbh->beginTransaction(State of Qatar 时,就能够呈请关闭自动提交,直到调用
$dbh->commit
才会再一次启用,具体决计于你的代码是何许编写的。假设底子驱动程序不扶持事务管理,则会抛出一个PDOException。

php 5.1.*

除了 PDO_CASE_UPPER 之外,还有 PDO_CASE_LOWER和
PDO_CASE_NATURAL(它是默许选项:使列保持数据库驱动程序再次回到的格局)。

·PDO_ERRMODE_SILENT那是暗许形式;它只是接收语句和数据库句柄对象的
errorCode 方法为你设置要反省的错误代码。

一旦你试用了
PDO,何况开掘了难点,请必需使用我们的荒诞追踪软件将其报告给我们。即便您使用的是
Oracle 驱动程序,则请使用此页:

// prepare to insert a large quantitiy of data$stmt =
$dbh->prepare(“INSERT INTO CREDITS VALUES ;

设若您正在运营 Windows,则请根据下列表明实践:

比如在 Windows 目录中有三个 PHP 4 的全局 php.ini
文件,则只怕会境遇难题。最佳的消除方法是,移动该 php.ini 文件,使其与
PHP 4 SAPI 坐落于同一的文本夹中,以切断 PHP 4 安装;举个例子,将其运动到与
php4apache.dll 相像的公文夹中。请留神,PHP 5
程序中毫无全体文书档案都以流行的;推荐的装置进度如上边所述 - 如 install.txt
文件所证明的,请勿将此外 DLL 复制到 windows 文件夹或 system 文件夹中 -
任何内容都以冷傲含的。假使您运营的是 apache,何况碰着不能加载 DLL
的失实,则检查一下是还是不是将 C:php5 增添到了 PATH 中。别的,还要小心 PHP 5
的 CGI 版本未来的称呼为 php-cgi.exe。

那几个常量所代表的情趣字面就能够推知,但是 PDO_ERR_CANT_MAP
代码除却;那是二个 PDO
特定的代码,也正是说它无法将驱动程序特定的代码映射到联合的错误代码,由此你应该查询
errorInfo(State of Qatar 方法重返的驱动程序特定代码来收获更加的多音信。

现阶段,PDO 完全未有实行自身的别样连接管理,因而每一个“新
PDO”调用都会建构一个新的数据库连接。该连接在 $dbh
变量越界时,可能当你为其钦定 NULL 值时会被假释。

POD 的现状和前途

抓取数据

连接 PDO

% ./configure –prefix=/usr/local/php5 –with-zlib [此地内定其余选项]%
make install

1.使用 PHP 流的 LOB 扶助。
使用绑定参数,您能够将其它流动资金源(如文件、套接字、HTTP
财富、压缩/筛选的流)作为输入或输出参数字传送递到在 LOB
上运转的询问中。与之相像,类型为 LOB 的输出参数将展现为 PHP
流,因而你可以运用 fread 和其他流函数来访谈这几个参数。当时,在 PDO
中根本未曾 LOB 扶植。 2.长久性连接和缓存的预管理语句。
长久性连接使您可以幸免在各种页面命中时开采和倒闭数据库服务器连接。缓存的预管理语句又升高了一步,它让你能够持久保持查询的预管理版本以致数据库句柄。
3.游标。 这两天,PDO
只提供前向只读游标,可是未来会提供可滚动游标、REF-CURubiconSORubicon、使用游标举行牢固更新,以致可更新滚动游标。

预管理了讲话之后,大家运用 bindParam(State of Qatar 方法来将那些命名参数分别与 PHP
变量名称“$extension”和“$name”相关联 相似)。大家还有恐怕会通报
Oracle,那些多中校要格式化为字符串,最大尺寸为 64 个字符。

// Create a PDO database handle object// the ‘oci:’ string specifies
that the OCI driver should be used// you could use ‘oci:dbname=name’ to
specify the database name.// The second and third parameters are the
username and password respectively$dbh = new PDO(‘oci:’, ‘scott’,
‘tiger’);

$stmt = $dbh->prepare(“begin sp_add_item(:item_name,
:error_code); end”);$stmt->bindParam(‘:item_name’, $item_name,
PDO_PARAM_STR, 12);$stmt->bindParam(‘:error_code’, $error_code,
PDO_PARAM_STR, 12);$stmt->execute();

今日检查一下,确定保障它能够运行:

此驱动程序也需求从 php.ini 文件加载;将下行增加到前边增添的那行之后:

您还是能动用 bindParam
来为存款和储蓄进度设置输入/输出参数;语法是完全相似的,只是查询有所分歧。下边包车型大巴代码演示怎样调用三个名字为“sp_add_item”的储存进程;其目标是要目的性输入设置
$item_name,然后该存储过程就要再次回到时更新 $error_code。

PDO
未来仍特别不成熟,但是会飞快成熟起来。在编写本文之时,作者在本文中关系的其余内容都能够通过
PDO_OCI 驱动程序适用于 Oracle 8 或越来越高版本(在 Oracle 8.0 和 9.2
上测量试验过)。

为了使得示例更自然,笔者从 PHP
源代码中抽出了扩充及其小编的音讯,并将其积累到了一个 CSV
文件中(请参见“相关附属类小零器件:credits.csv”)。那就象征三个科学普及景观:从 CSV
文件批次导入数据。在我们的身体力行中,我们丰盛利用了 Oracle
的预管理语句和绑定参数,以得到多少个便捷的数量导入脚本。在陈诉该示例在此之前,有不可能贫乏领会一下
PDO 处管事人务的措施。

问询三个编程 API
的最佳法子便是应用它,因而大家来看一下附带的这一个演示,以询问如何进展批次更新。

[ 将 extension=pdo.so 添加到 php.ini ]

Oracle
具备多少个机敏的默许操作方式:当您实行接二连三时,将会放在三个隐式事务管理中,在付出业务从前在那之中的变动不会全盘奏效。除了事务管理的正统优点(原子性、一致性、隔开性、可持久性

ACID)之外,数据库服务器在实践每一趟换代之后还没有必要重新构建索引和此外内部构造;它可以顺延到提交以往进行。那样会加速代码的试行。Oracle
这一点真正很好。

% wget pear install PDO_OCI-0.1.tgz

·从 获取 PHP 5,将其解压缩到
C:php5。 ·从
和 分别获得 PDO
和 PDO_OCI,将其归入 C:php5ext。大概,您能够从 PHP 5
下载页上列出的“用于 PHP 5.0.0 的 PECL 模块会集”zip 文件中找到全体这么些PDO 驱动程序,以致全部 PECL 程序包的富有 Windows 版本。 ·编辑
C:php5php.ini 文件,并丰裕下列内容:

·PDO_FETCH_ASSOC -
每一种行抓取依据行集中的列名,再次回到四个按列名索引的数组。

if {echo $dbh->errorCode() .”
“;$info = $dbh->errorInfo();// $info[0] == $dbh->errorCode(State of Qatar统一的荒金朝码// $info[1] 是驱动程序特定的荒诞代码// $info[2]
是驱动程序特定的错误字符串}

在模块列表中,您应该会见到 PDO 和 PDO_OCI。

当今你须要获得数据库特定的驱动程序;对于 Oracle,此特定程序名称叫PDO_OCI。在 shell 中,键入:

我们期望在 PHP 5.1 中暗许启用 PHP 扩张,不过以前,大家愿意能让 PDO
在 PHP 5.0
公布时稳固运转,可是我们日常工作中的压力微微贻误了那几个干活儿。同一时间,通过
PECL 揭橥 PDO 使大家能够在收受难题报告时做出回应,并遵照差别于 PHP 5.0
发表时间表的时间表发表修复版本,因而你在 PHP 5.1 发表前就能够使用 PDO。

终极一种方式为 PDO_FETCH_BOUND,该格局会报告 PDO
您曾经将全数列绑定到了 PHP
变量,並且除了要它在达到行集的结尾时通报你外没有要求它实践其余任何操作。绑定输出列在概念上与绑定输入参数相通,只是绑定输出列能够用来全数数据库驱动程序。您能够将
PHP 变量绑定到命名列,PDO 就要历次调用 execute()时对其进行更新。此本事可用来剃去结果集中每列、每行的某个伪造机器操作码。这种本事的弱项在于,恐怕会使您的代码难以追踪,您使用变量名称时须求倍加小心。上边包车型大巴代码表达了绑定输出列的行使。请在乎,您不用钦赐PDO_FETCH_BOUND 就能够使用 $stmt->bindColumn(卡塔尔;PDO_FETCH_BOUND
只是三个对此你了解只可以利用绑定值的图景的一种优化。

另二个麻烦 PHP
数据库扩张的一致性难点是错误处理计谋的一致性:有些扩大会回去的错误代码需求你手动抓取错误字符串,而任何一些恢宏则只是发生PHP 警示。PDO 允许你从下列三种分裂的错误管理计策中精选一种:

// Commit the changes$dbh->commit();

我们后日即策画好插入数据了 - 大家只必要展开该 CSV
文件,并从当中获取数据就可以。通过运用 fopen
函数能够一定轻便地成功此操作。然后,大家得以行使 PHP list(卡塔尔国布局函数直接将 CSV
的列钦点给变量“$extension”和“$name”。因为这个变量已经绑定到了语句中,所以大家以往要做的只是调用该语句对象的
execute(卡塔尔 方法使其进行插入。这种艺术既有助于又高效 -
在事务管理时每一个迭代循环独有两行。达到文件尾时,大家就足以即时利用数据库句柄的
commit(卡塔尔 方法来交付这几个改善了。

·PDO_FETCH_LAZY -
每种行抓取重返多个引用语句对象的重载对象。那“看起来”好疑似PDO_FETCH_OBJ 和 PDO_FETCH_BOTH 的组合,只是唯有当你在剧本中访谈 PHP
变量时才创立那么些变量。 ·PDO_FETCH_BOUND - 抓取每行,重临TRUE。在行使绑定输出列时这种艺术丰硕有用,它可以幸免创制无需的别样数组或对象。。

为啥那几个抽象层会存在此种难题?这么些抽象层总是在总结完毕太多的天职,以致恐怕是不大概的任务。大家决定以实用为对象,仅将有个别最广大的数据库
API 本性作为大家的基本功,并使得 PDO
驱动程序能够将它们特定于付加物的特色揭破为常规扩大函数。

我们因而建议了这种 PHP 数据对象 的概念,是因为我们期望经过利用 Zend
Engine 2不甘寂寞的面向对象性子取得该 API 的局地更十全十美的质量。

PDO 援助采纳 Oracle 样式命名的占位符语法将变量帮定到 SQL
中的预管理语句(与 oci8 扩张中的 ocibindbyname。PDO
还为其余数据库提供了命名占位符模拟,以至可感到生来就不援救该概念的数据库模拟预管理语句和绑定参数。那是
PHP 向前迈进的积极一步,因为如此可以使开辟职员能够用 PHP
编写“集团级”的数据库应用程序,而不用专程关怀数据库平台的力量。

您大概想掌握 PDO 与别的常用的抽象层的比较情形,比如 PEA路虎极光 DB 或
ADODB。无论在 API 方面或许在性质方面,PDO
都比别的大范围抽象层要轻型,不过关乎到在相继数据库后端之间提供统一性方面,则不比那多少个抽象层,举个例子用于拍卖多量可移植性难题的
PEA中华V MDB 2 抽象层。

———–关于作者Wez Furlong 是 Brain Room Ltd.
的手艺主任,他在该铺面不但利用 PHP 用于 Web 开拓,还将其视作 Linux 和
Windows 应用程序和体系的嵌入式脚本引擎。Wez 是 PHP
的焦点开采职员,平日向 SQLite、COM/.Net、ActivePHP、mailparse 和 Streams
API 等投稿,他是 PECL 即 PHP 扩张社区库的“头儿”。他的问讯集团的网页为

NULL

PDO
扶植部分差别的抓取战略,这么些政策在方便性和性质方面具有差别;通过将下列选项之一钦赐为
fetch(State of Qatar 方法的参数,您能够转移其重回值以适应您的语法:

已经安顿扩充以下注重特点,在不久将得以应用:

有别于轻重缓急写的列

安排在不久的未来为 PDO 扩张连接缓存效能;就当前的 oci8
扩展来讲,会引用与存活服务器的连年,并且在这里些连接中,还有只怕会引用闲置的记名。当在缓存连接方式中运作时,如上边的代码段所示释放
$dbh 时会将该登陆标志为可由别的总是重用。

假设 PDO 不是二个完全的抽象层,那还有啥其他原因值得你构思选拔它呢?

·品质。PDO 从一开首就摄取了现有数据库扩大成功和停业的经验教训。因为 PDO
的代码是崭新的,所以我们有空子再一次开头陈设个性,以使用 PHP 5
的流行天性。 ·技巧。PDO 意在将大范围的数据库作用作为功底提供,同有时候提供对于
PRADODBMS 独特效用的有利访问。 ·简单。PDO 意在让你能够轻便使用数据库。API
不会冷酷插足您的代码,同期会知道地方统一标准明种种函数调用的进度。
·运转时可扩充。PDO
扩张是模块化的,使你能够在运作时为您的数据库后端加载驱动程序,而不要再度编写翻译或重新安装整个
PHP 程序。比如,PDO_OCI 增添会代表 PDO 扩张落成 Oracle 数据库
API。还或者有一部分用来 MySQL、PostgreSQL、ODBC 和 Firebird
的驱动程序,愈来愈多的驱动程序尚在支付。

既是大家已经打响总是到了
Oracle,那么以往就能够创立一个表来保存一些数量了。对于此示例,我们应用一些
PHP 扩充及其笔者,并将那一个内容输入一个数据库中。数据库句柄对象的 exec(卡塔尔方法可用来发生不会回去结果集的火速一回性查询,因而我们在这处运用该方法来发生CREATE TABLE 查询。

% pear install PDO_OCI-alpha

大家须要你的申报

先是创立 PDO
类的三个实例,将其当做数据库句柄。使用哪个根底驱动程序并不主要;您总要使用
PDO 类名。构造函数的率先个参数为数据源名称
,第3个参数为客户名,第多少个参数为该客商名的口令。DSN 的 PDO 命名惯例为
PDO
驱动程序的称呼,后边三个冒号,再前边是可选的驱动程序特定的音信。在大家的为人师表中,会加载
OCI
驱动程序但不钦定其余其余音讯;那样会使用暗中同意的数据库。对于别的驱动程序,如
ODBC 驱动程序,第三个冒号前面包车型大巴装有内容都将被作为 ODBC DSN。MySQL
驱动程序会相似以分歧的不二诀要疏解它的 DSN。

extension=php_pdo.dllextension=php_pdo_oci.dll

// Open the .csv file for import$fp = fopen;while {list =
fgetcsv;$stmt->execute;

extension=pdo_oci.so

在接连字符串中,您能够钦命多少个可选参数;第二个是数据库名称,第2个是字符集;那个参数与可选的第多个和第八个参数相呼应,后多个参数您大概在
oci8 扩充函数 ociconnect
中使用过。要使用一定的字符集连接二个一定的数据库,则足以奉行下列操作:

[ 将 extension=pdo_oci.so 添加到 php.ini ]

缘何选取 PDO?

while ($row = $stmt->fetch {echo “Extension $row[EXTENSION] by
$row[NAME]
“;}

·提供一种轻型、清晰、方便的 API ·统一各类分化 景逸SUVDBMS
库的共有天性,但不免除越来越尖端的风味。 ·通过 PHP
脚本提供可选的十分大程度的抽象/包容性。

利用 PDO
抓取数据与打开扦插或更新相符,只是你实践完询问未来,将要重复调用 fetch(卡塔尔方法来取得结果集的下一行。进行获取的最简便易市场价格况如下所示,值得注意的有个别是,您还足以将参数绑定到查询,以决定如
WHERE 子句那样的剧情;试行此操作的语法与我们早就看见的 bindParam(卡塔尔国代码完全相通。

% PATH=”/usr/local/php5/bin:$PATH”% pear install PDO-alpha

一名新 PHP 数据对象
数据抽象层的原有开垦人士为你简要介绍该抽象层,注重呈报与 Oracle
一齐运维的处境。

预管理语句、存款和储蓄进程

·PDO_ERRMODE_WA帕JeroNING除了安装错误代码之外,PDO 还有也许会产生 PHP
警报,您能够应用正规的 PHP
错误管理程序捕获该警报,并聚焦使用您计划好用于应用程序的别的错误管理/记录计策,也许只是使该错误呈现在浏览器中。
·PDO_ERRMODE_EXCEPTION除了安装错误代码之外,PDO 还有也许会抛出三个PDOException,并将其性能设置为带有该错误代码和音讯。然后,您能够在代码的较高端别捕获该特别,使用全局拾叁分管理程序捕获该极度,也许不对其开展拍卖而告一段落脚本。

// bind the inputs to php variables; specify that the data will be
strings// with a maximum length of 64
characters$stmt->bindParam(‘:extension’,$extension,PDO_PARAM_STR,
64);$stmt->bindParam(‘:name’, $name,PDO_PARAM_STR, 64);

oci.dll下载用于 Oracle 的 PDO,在数据库预编写翻译代码推行的时候现身差距。·PDO_FETCH_BOTH -
每一种行抓取再次回到叁个既遵守列地点又如约列名索引的数组。约等于上述二种情景的直白组合。若无一点名抓取方式,则该方式为暗中认可情势。
·PDO_FETCH_OBJ - 每一种行抓取重返贰个无名氏对象,其属性名与列名对应。

要是你使用 ODBC 驱动程序访谈 Oracle,则也许会很钟爱地潜心到,暗中认可意况下
PDO_ODBC 驱动程序接济 ODBC 连接池。

可移植脚本的另二个难点是拍卖从种种数据库处理程序重返的种种分歧的大错特错音信;某个数据库对于程序化管理错误的协助力量比较糟糕,而其他一些数据库则有着特别丰硕的错误代码。只要有效,PDO
将为你的本子提供三个联合的错误代码,进而令你不用为应对可移植性的这么些下边所累。当然,PDO
还有大概会为驱动程序提供原生错误代码和错误音讯,防止您要求用它来开展诊断,也许错误代码映射不完全。

鉴于 PHP 越来越受迎接并不停成功,因而首要 PHP
数据库扩张的维护者们到场了在德意志联邦共和国进行的 LinuxTag 二零零四大会,在会上我们沟通了对 PHP 前程的见解。在座谈 PHP
发展的随机性时,大家分明了在 PHP 中开展数据库访谈的部分对象:

不菲数据库驱动程序都会意味着你事情发生前抓取并缓存一定数额的行。PHP
每便访问在那之中二个这么行中的列时,它都须要将其复制到本身的专项使用内部存款和储蓄器区域中。假诺您的查询涉及好些个行,而只要求依据某种复杂的逻辑访谈给定行的特定列,则您会意识
PDO_FETCH_LAZY
是一种防止使用过多内存的管事方法,因为它独有在你访谈给定列时才复制该列。使用此办法时要小心,从有些给定语句为各个fetch(卡塔尔国抓取的“惰性对象”是历次迭代时选择的平等对象。那就暗中提示着您不可能只是简短地蕴藏该指标用于未来的相比,因为它依然会引用该语句的一时一刻行
- 您供给手动复制所需求的片段。

getMessage(); }?>

若是产生了难点还要 PHP
出错,您的剧本将脱离而且作业处于待批状态;可能您关闭数据库句柄时,PDO
会自动针对别的待批的业务调用
$dbh->rollBack(卡塔尔。此行为会减削向数据库中提交大概未定义或然已破坏数据的大概性,那是用于拍卖已扬弃工作的专门的工作语义。

// start a transaction$dbh->beginTransaction();

PDO 中的事务管理

try {$dbh->exec;} catch {// 展现警示新闻print
$e->getMessage(卡塔尔国;$info = $e->errorInfo;// $info[0] ==
$e->code; unified error code// $info[1] 是驱动程序特定的谬误代码//
$info[2] 是驱动程序特定的失实字符串}

假使你使用的是别的驱动程序,则请用其名目替换该 URL 中 PDO_OCI。

% wget pear install PDO-0.1.1.tgz

一旦不能加载该驱动程序,只怕发生了连接退步,则会抛出三个PDOException,以便你能够决定怎样最棒地处理该故障。

Windows 安装

简单 try..catch
调控构造并无益处。假诺在应用程序的较高等别没有概念至极管理,则在无法构造建设数据库连接的情事下,该脚本会终止。

现行反革命你就足以应用“pear”工具获得并安装 PDO 以至用于 PDO 的 Oracle
驱动程序了。因为 PDO 当前标识为 阿尔法,所以暗中同意意况下 pear
工具不会下载该程序包。在该程序包名称后边增加后缀“-阿尔法”,通知该 pear
工具得以安装 alpha 版本:

extension=pdo.so

无论是你使用哪一类抓取计谋,当没有其余行可抓取时,fetch(卡塔尔 方法将会重返FALSE。

$dbh = new PDO(‘OCI:’, ‘scott’,
‘tiger’);$dbh->setAttribute(PDO_ATTR_ORACLE_NULLS, true卡塔尔;//
今后今后 $dbh 张开的别的语句中的// 空字符串都将被转换为 NULL

$dbh = new PDO(‘OCI:’, ‘scott’,
‘tiger’);$dbh->setAttribute(PDO_ATTR_CASE, PDO_CASE_UPPER);stmt =
$dbh->prepare(“SELECT extension, name from CREDITS”);if
{$stmt->bindColumn(‘EXTENSION’,
$extension);$stmt->bindColumn;while ($stmt->fetch {echo
“Extension:$extension, Author:$namen”; }}

听过有关数据库抽象扩张谣传的绝大许多人会立即对 PDO 的扩张方面发出狐疑 -
大家是还是不是要分析 SQL,将其更改为相应的后端方言呢?大家怎么管理个性 X
或特色 Y,等等。因而,当您据书上说我们在 PDO
中根本并不是为此而焦躁时只怕会吃惊;大家不希望使全体剧情都统统统一,因为要使得这种联合改为恐怕,只好是将团结约束在低于的通用规范。

在哪个地方能够拿走 PDO?

getMessage(); }?>

你须要报告 PHP 从专项使用于 PHP 5 的 php.ini 文件加载 PDO
驱动程序。假诺你使用的前缀与本人利用的相符,PHP 则会在
/usr/local/php5/lib/php.ini 中寻找 php.ini 文件。向该文件中加多以下行:

$stmt = $dbh->prepare(“INSERT INTO CREDITS VALUES ;

请记住,使用 PDO_FETCH_NUM
的资费比极小,因为访谈列数据只是贰个粗略的数值查询。PDO_FETCH_OBJ
使您能够使用 OO
语法将数据集的列作为对象的习性来拜会,可是每种属性访谈都涉及二个叠合的散列查询,使得应用它的开销基本上与
PDO_FETCH_ASSOC 相符。每种那样的形式都会复制整行,进而占用稍多的内部存储器。

借让你只是要传递输入参数,何况有众多这么的参数要传送,那么你会以为下边所示的火速方式语法非常有协助;此语法让你可以节省对
$stmt->bindParam(卡塔尔国 的调用。

可移植性

PHP
主假若由志愿者成功的档期的顺序;即便某些有的固定的“焦点”开拓人士,不过我们平素不一位在全职受薪的开支PHP。除此而外,大家独家位居世界分歧地点,您能够想象长时间开拓的协和专门的学业是何许艰辛。由此,PHP
首借使基于胡思乱量的村办长期要求来发展的,其原因也无所不有,有的是试验,有的则是因为“前不久有活要交”。即使那样经常每一步都会改过PHP,但从浓重来看则是缺乏完整性 - 数据库扩充正是三个关键的例证。

getMessage(卡塔尔;exit; }// 在这里处对数据库施行一些操作 // …//
将来完毕,释放该连接$dbh = null;?>

接纳 PDO 预管理语句特轻易,调用数据库句柄的 prepare()方法就可以。它会重临二个话语句柄对象,然后您能够行使该对象来绑定参数和推行语句。在这里示例中,大家就要定义四个命名占位符,“:extension”和“:name”,那多个占位符分别与
.CSV 文件中的 PHP 扩充名称和中间一个小编的姓名相对应。

·PDO_FETCH_NUM - 每一种行抓取重临二个安份守己列地点索引的数组,并且以 0
为基数。

使用 PDO

PHP 中的数据抽象层概念一点都不能算新;在 Google 中查询“PHP database
abstraction”会找到大概 83,200 个相配项。它差没有多少是广大 PHP
开垦人士春树暮云的,而其发生则某些归因于大家不完全的
API。若是您曾经尝试过使用第三方抽象层来造成其余真正关键的干活,经常会发觉那几个抽象层对于手头的工作来讲设计的功力过于强大了

可能表现为在使用前必要进行大气读书,可能变现为接口速度迟滞,参数须求通过多层脚本函数调用技巧达到数据库自有的
API;通常是存在上述二种表象。

while ($row = $stmt->fetch {printf(“Extension %s, by %s
“, $row[0], $row[1]);}

但有三个调换难点 - 当你使用 PDO_FETCH_ASSOC
抓取多少时,区别的驱动程序会以分裂的不二秘籍赶回列名 -
有个别会将列名转变为大写,有些转变为小写,有些则会使其呈查询中钦赐的体裁。这对于
PHP 脚本来说是多个机密的标题,因为数组键区分抑扬顿挫写。PDO
提供了二个包容性属性来扶助标准脚本的结果。上边包车型客车小代码段是地点PDO_FETCH_BOUND 示例的可移植版本,因为 setAttribute(卡塔尔 方法调用会引导PDO 将抓取再次回到的列名全部转变为大写:

$stmt = $dbh->prepare(“SELECT extension, name from CREDITS”);if
{$stmt->bindColumn(‘EXTENSION’,
$extension);$stmt->bindColumn;while ($stmt->fetch {echo
“Extension:$extension, Author:$namen”; }}

, , , , , , , ,


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图