文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>PHP ADODB 五个使用范例(转)

PHP ADODB 五个使用范例(转)

时间:2006-08-29  来源:manbuzhe0301

范例 1: Select 指令
任务:连结到 Access 的 Northwind DSN,然後在每一列显示头2个栏位。(Northwind 北风资料库,在ODBC设定的DSN,是Access的标准范例资料库)
在这个范例中,我们建立一个 ADOConnection 物件,它代表了和资料库的连结。连结是以 PConnect 函数来初始化的,然後会持续的连结着。任何时候我们要查询资料库时,我们就呼叫 ADOConnection.Execute() 函数,这将会回传一个 ADORecordSet物件。事实上它只是一个指向在fields[]阵列中,目前记录的指标,我们使用MoveNext()来在记录间移动。
注意:另一个很有用的函数 SelectLimit 并没有在这个范例里使用,这个函数允许我们去限制显示的资料笔数。
PConnect('northwind');   # 连结到 MS-Access 北风资料库
$recordSet = &$conn->Execute('select * from products');
if (!$recordSet)
        print $conn->ErrorMsg();
else
while (!$recordSet->EOF) {
        print $recordSet->fields[0].' '.$recordSet->fields[1].'
';
        $recordSet->MoveNext();
}
$recordSet->Close(); # 选择性执行
$conn->Close(); # 选择性执行
?>
在这个例子中,$recordSet回传了存在$recordSet->fields阵列里,目前所指向的记录。以栏位编号为索引,起始值为0。我们使用MoveNext()函数来移动到下一笔记录,当到了最後一笔时,EOF属性会被设定为true。当Execute()函数执行有错误时,会回传一个false值,而不是一个recordset物件。
$recordSet->fields[]阵列是由PHP资料库扩充函数库所产生的。有一些资料库扩充函数库仅支援以编号来进行索引,而不支援以栏位名为索引。要强迫使用栏位名索引,也就是要使用关连式阵列,请使用 $ADODB_FETCH_MODE 全域变数来设定。当一个资料集被Execute()或是SelectLimit()函数建立时,都会储存而且使用储如此类的设定模式。
       $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
        $rs1 = $db->Execute('select * from table');
        $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
        $rs2 = $db->Execute('select * from table');
        print_r($rs1->fields); # shows array([0]=>'v0',[1] =>'v1')
        print_r($rs2->fields); # shows array(['col1']=>'v0',['col2'] =>'v1')
上面的范例说明,如果要以顺序来存取栏位,就将 $ADODB_FETCH_MODE 的值设为 ADODB_FETCH_NUM,要以关连式阵列(以栏位名)存取栏位,就要将值设为 ADODB_FETCH_ASSOC。
要取得在被选到的记录笔数,你可以使用$recordSet->RecordCount()方法。注意,如果不能确定得到的记录笔数,会回传 -1 。
范例 2: 进阶的 Select 指令(使用 Field 物件)
任务:选取一个资料表,显示最前面的二栏。如果第二栏是一个日期或时间型态栏位,将它格式化成US格式。
PConnect('northwind');   
$recordSet = &$conn->Execute('select CustomerID,OrderDate from Orders');
if (!$recordSet)
        print $conn->ErrorMsg();
else
while (!$recordSet->EOF) {
        $fld = $recordSet->FetchField(1);
        $type = $recordSet->MetaType($fld->type);
        if ( $type == 'D' || $type == 'T')
                print $recordSet->fields[0].' '.
                        $recordSet->UserDate($recordSet->fields[1],'m/d/Y').'
';
        else
                print $recordSet->fields[0].' '.$recordSet->fields[1].'
';
        $recordSet->MoveNext();
}
$recordSet->Close(); # optional
$conn->Close(); # optional
?>
在这个例子中,我们使用 FetchField() 函数来检查第二个栏位的资料型别。这将会回传一个至少有三个栏位的物件,栏位说明如下:
name: 栏位名
type: 栏位的资料原生型别native field type of column
max_length: 栏位的最大长度,部份资料库像MySQL,并不回传栏位的正确值,以这个例子而言,就会回传 -1 。
然後我们使用 MetaType() 去转换原生型别成通用型别,目前通用型别定义如下:
C:  character 栏位,应该使用  标记来取值。
X: 文字栏位(Text) , 长文字栏位,使用  标记来显示资料。
B: Blob 栏位或者大型的二位元物件(像程式,图档等)。
D: 日期栏位
T: 时间栏位
L: 逻辑栏位(真假值)或位元栏位
N: 数字栏位,包含自动进位、编号、整数、浮点数、实数等。
R: 序列栏位,包含了序列、自动增进整数,只对被选择的资料库作用。
如果对应型别是日期或时间,那你可以使用 UserDate() 函数来设定输出的日期格式。这个函数会转换 PHP SQL 日期字串格式为使用者定义的格式。 另一个使用MetaType()的时机是在进行SQL新增或更新指令时,资料格式验证用。
范例 3: 新增记录 指令
新增一笔记录到订单资料表,里面包含了日期和字串,为了能被资料库正常存取,字串必需校正,以避免部份标记字元。例如:有单引号的字串,John's。
PConnect('northwind');   # connect to MS-Access, northwind dsn
$shipto = $conn->qstr("John's Old Shoppe");
$sql = "insert into orders (customerID,EmployeeID,OrderDate,ShipName) ";
$sql .= "values ('ANATR',2,".$conn->DBDate(time()).",$shipto)";
if ($conn->Execute($sql) === false) {
        print 'error inserting: '.$conn->ErrorMsg().'
';
}
?>
在这个范例中,我们看见了ADODB更进一步的日期及标点符号的处理方式。Unix 日期时间标示(长整数)被DBDate()格式化成Access可以接受的格式,而带了缩写符号的 John's Old Shoppe 则被 qstr() 函数处理成 John''s Old Shoppe 字串,以被资料库合法存取。
观察 Execute 指令的错误处理。如果 Execute() 执行有错误发生时,会传回 False 值。而最後的错误讯息可以由  ErrorMsg() 来显示。
附记:php_track_errors旗标可以被启动,以便将错误讯息储存起来。
范例 4: 除错 指令
PConnect('northwind');   # connect to MS-Access, northwind dsn
$shipto = $conn->qstr("John's Old Shoppe");
$sql = "insert into orders (customerID,EmployeeID,OrderDate,ShipName) ";
$sql .= "values ('ANATR',2,".$conn->FormatDate(time()).",$shipto)";
$conn->debug = true;
if ($conn->Execute($sql) === false) print 'error inserting';
?>
在上面的例子中,我们藉由设定 debug=true 来启动除错模式。这将会在执行指令时会先将SQL指令显示,并且会显示所有的错误讯息,而不需要去呼叫 ErrorMsg() 。显示资料集的部份,可以叁考 rs2html() 范例。
其它的请叁考自定错误处理的说明。
范例 5: 一次连结两个资料库
PConnect($server, $userid, $password, $database);
$conn2->PConnect(false, $ora_userid, $ora_pwd, $tnsname);
$conn1->Execute('insert ...');
$conn2->Execute('update ...');
?>

相关阅读 更多 +
排行榜 更多 +
方块拼凑最新版 v1.0 安卓版

方块拼凑最新版 v1.0 安卓版

休闲益智 下载
方块拼凑最新版 v1.0 安卓版

方块拼凑最新版 v1.0 安卓版

休闲益智 下载
愤怒的小鸟爆破安卓版 v2.7.0 手机版

愤怒的小鸟爆破安卓版 v2.7.0 手机版

飞行射击 下载