打印本文 打印本文 关闭窗口 关闭窗口
PHP ADODB1.99版手册 (修正版)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数7527  更新时间:2009/4/23 10:41:03  文章录入:mintao  责任编辑:mintao
.php''''); include_once(''''tohtml.inc.php''''); session_register(''''curr_page''''); $db = NewADOConnection(''''mysql''''); $db->Connect(''''localhost'''',''''root'''','''''''',''''xphplens''''); $num_of_rows_per_page = 10; $sql = ''''select * from products''''; if (isset($HTTP_GET_VARS[''''next_page''''])) $curr_page = $HTTP_GET_VARS[''''next_page'''']; if (empty($curr_page)) $curr_page = 1; ## at first page $rs = $db->PageExecute($sql, $num_of_rows_per_page, $curr_page); if (!$rs) die(''''Query Failed''''); if (!$rs->EOF && (!$rs->AtFirstPage() || !$rs->AtLastPage())) { if (!$rs->AtFirstPage()) { ?> <a href="<?php echo $PHPSELF,''''?next_page='''',$rs->AbsolutePage() - 1 ?>">Previous page</a> <?php } if (!$rs->AtLastPage()) { ?> <a href="<?php echo $PHPSELF,''''?next_page='''',$rs->AbsolutePage() + 1 ?>">Next page</a> <?php } rs2html($rs); } ?>

以上的程序码可以在 testpaging.php 范例里找到。

使用自定错误处理及 PEAR_Error

在之前的版本,你可以使用像 $con->debug=true ; 这样的设定来进行除错。但在 1.50 版后,我们提供了另一种方法来处理错误状态。我们让工程师可以使用 ADODB 的自订错误处理程序功能。

ADODB 提供了两种自订处理方式,你可以配合你的的需要而修订。第一个方法放在 ADOdb-errorhandler.inc.php 文件里。这让你可以使用标准的 PHP 函数 err_reporting 去控制要显示怎样的错误信息及 trigger_error 去调用 PHP 预设的错误处理程序。

引入了上述文件后(ADOdb-errorhandler.inc.php),当发生了下列的错误后,将会使得 trigger_error($errorstring,E_USER_ERROR)被调用。

  1. Connect() 或 PConnect() 执行失败时。

  2. 执行 SQL 指令的函数失败时,如 Execute() 或 SelectLimin() 。

  3. GenID() 进入了无限回圈时。

这里的 $errorstring 变量是由 ADODB 所产生的。而且会包含了有用的除错信息,类似于随后会建立的 error.log 数据。所以,为了要能正确提供除错信息,你要在建立 ADOConnection 物件前,就把 ADOdb-errorhandler.inc.php 引入到程序码中。

If you define error_reporting(0), no errors will be shown. If you set error_reporting(E_ALL), all errors will be displayed on the screen.

如果你设定了 error_reporting(0) 的话,将不会有任何错误被显示。如果你设定了 error_reporting(E_ALL),那将会显示所有的错误信息。

以下是一个简单的范例:

<?php
error_reporting(E_ALL); # 显示所有的错误信息
include(''''ADOdb-errorhandler.inc.php'''');
include(''''ADOdb.inc.php'''');
include(''''tohtml.inc.php'''');
$c = NewADOConnection(''''mysql'''');
$c->PConnect(''''localhost'''',''''root'''','''''''',''''northwind'''');
$rs=$c->Execute(''''select * from productsz''''); #不正确的数据表 productsz'''');
if ($rs) $rs2html($rs);
?>

如果你要把错误信息记录下来,你可以定义两个选择性常数 ADODB_ERROR_LOG_TYPE, ADODB_ERROR_LOG_DEST。有关于 ADODB_ERROR_LOG_TYPE 的值,你可以去参考 PHP 使用手册中有关于 error_log 的说明。在以下的范例中,我使将它设为 3,意思是指将信息记录到常数 ADODB_ERROR_LOG_DEST 所设定的文件中。

<?php
error_reporting(0); # 不显示任何的错误信息
define(''''ADODB_ERROR_LOG_TYPE'''',3);
define(''''ADODB_ERROR_LOG_DEST'''',''''C:/errors.log'''');
include(''''ADOdb-errorhandler.inc.php'''');
include(''''ADOdb.inc.php'''');
include(''''tohtml.inc.php'''');

$c = NewADOConnection(''''mysql'''');
$c->PConnect(''''localhost'''',''''root'''','''''''',''''northwind'''');
$rs=$c->Execute(''''select * from productsz''''); ## 不正确的数据表 productsz
if ($rs) $rs2html($rs);
?>

以下则是写在 error.log 档的错误信息:

(2001-10-28 14:20:38) mysql error: [1146: Table ''''northwind.productsz'''' doesn''''t exist] in
 EXECUTE("select * from productsz")

第二种错误处理方法是 ADOdb-errorpear.inc.php 。使用这种方式,在错误发生时会产生 PEAR_Error 衍生物件,而最后产生的 PEAR_Error 物件可以被 ADODB_Pear_Errir() 函数取回。

<?php
include(''''ADOdb-errorpear.inc.php'''');
include(''''ADOdb.inc.php'''');
include(''''tohtml.inc.php'''');
$c = NewADOConnection(''''mysql'''');
$c->PConnect(''''localhost'''',''''root'''','''''''',''''northwind'''');
$rs=$c->Execute(''''select * from productsz''''); #不正确的数据表 productsz'''');
if ($rs) $rs2html($rs);
else {
        $e = ADODB_Pear_Error();
        echo ''''<p>'''',$e->message(),''''</p>'''';
}
?>

在引入 ADOdb-errorpear.inc.php 档之前,藉由定义 ADODB_PEAR_ERROR_CLASS 常数,你可以使用一个 PEAR_Error 衍生类别。为了方便除错,你可以在 PHP 程序码的最前面定义预设的错误理方式为 PEAR_ERROR_DIE,这将会使得程序一出错,马上就输出错误信息,并且停止执行。

include(''''PEAR.php'''');
PEAR::setErrorHandling(''''PEAR_ERROR_DIE'''');

注意,当错误产生时,ADODB并没有明确的返回一个 PEAR_Error 物件给你。你必需要去调用 ADODB_Pear_Error() 函数去取回最后的错误内容。或者,你可以使用 PEAR_ERROR_DIE 这个技巧。

数据集快取

现在,ADODB使用 CacheExecute(),CachePageExecute()及CacheSelectLimit()函数来支持数据集快取。用法类似于没有快取的函数,除了要加上一个新的参数 $secs2cache。

以下是一个范例 :

include(''''ADOdb.inc.php''''); # 载入ADODB
$ADODB_CACHE_DIR = ''''/usr/ADODB_cache'''';
$conn = &ADONewConnection(''''mysql'''');  # 建立一个连接
$conn->PConnect(''''localhost'''',''''userid'''','''''''',''''agora'''');# 连接到 MySQL, agora 数据库
$sql = ''''select CustomerName, CustomerID from customers'''';
$rs = $conn->CacheExecute(15,$sql);

第一个参数是设定查询的快取秒数。随后调用的查询将会使用存放在由  $ADODB_CACHE_DIR 变量指定的快取数据。要强迫查讯执行,并且更新快取记录,使用 CacheExecute() 函数,并且将第一个参数设为 0 。或者,使用 CacheFlush($sql) 也行。

基于安全的考量,如果你要使用 $ADODB_CACHE_DIR,我们建议你将在 php.ini 里的 register_globals 设成 off。 

在 ADODB 1.80版以后,在 CacheSelectLimit() 及 CacheExecute() 中,参数 secs2cache 是选择性的。如果你不填上去,系统将会使用 $connection->cacheSecs 属性的值,它的预设值是 60 分钟。

       $conn->Connect(...);
        $conn->cacheSecs = 3600*24; // 快取24小时
        $rs = $conn->CacheExecute(''''select * from table'''');

参考手册

以[]包起来的参数为选用参数,可有可无。

共用变量

$ADODB_COUNTRECS

当本变量($ADODB_COUNTRECS)被设为 true 时,如果数据库驱动程序介面(API)不支持返回被 SELECT 指令所选取的数据笔数,那么 RecordCount() 函数将会自动模拟,并返回正确的数据笔数,预设值即为 true。模拟方式是建立一个内存暂存区来放置这些数据,因此当取回的数据笔数很大时,会占用很大量的内存。当设定本变量值为 false 时,会有最好的效能。本变量在每次执行查讯时都会自动检查,所以你可以依实际需要在每次查询前进行设定。

$ADODB_CACHE_DIR

如果你使用了数据集快取功能,那么那些快取数据都会被置放到这个变量所指定的目录里。所以当你要使用诸如 CacheExecute() 函数前,你应该要先设定好本变量。期于安全的考量,如果你要使用 $ADODB_CACHE_DIR,我们建议你将在 php.ini 里的 register_globals 设成 off。 

$ADODB_FETCH_MODE

这个共用变量决定了数据集以那种方式将数据传给阵列。数据集在被建立时(如 Execute()或SelectLimit())会把本变量($ADODB_FETCH_MODE)的值保存下来,而随后本变量($ADODB_FETCH_MODE)的任何改变都不会影响到现存的数据集,只有在以后数据集被建立起来时才会改变。

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9]  下一页

打印本文 打印本文 关闭窗口 关闭窗口