在运作中增加一个结合参数。目前兼容于 Microsoft SQL 及 Oracle oci8。以下是参数说明:
$stmt 由 Prepare() 或 PrepareSP() 回传的指令。
$var 要结合的 PHP 变量。
$name 要结合的预储程序的变量名。
[$isOutput] 设定参数传导的方向,0/false = IN 1=OUT 2= IN/OUT 。 在 oci8 中这个参数会被忽略,因为驱动程序会自动侦测。
[$maxLen] 参数变量的最大长度。
[$type] 参考 mssql_bind 及 ocibindbyname 在 PHP.NET 的文件说明以取得更多正确值的信息。
在 mssql,$opt 可以被下列的元素所影响:mssql_bind and ocibindbyname 。 例如 ;
# @RETVAL = SP_RUNSOMETHING @myid,@group
$stmt = $db->PrepareSP('SP_RUNSOMETHING');
# note that the parameter name does not have @ in front!
$db->Parameter($stmt,$id,'myid');
$db->Parameter($stmt,$group,'group',false,64);
# return value in mssql - RETVAL is hard-coded name
$db->Parameter($stmt,$ret,'RETVAL',true);
$db->Execute($stmt);
一个 oci8 的例子:
#对于 oracle, Prepare 及 PrepareSP 是相同的
$stmt = $db->PrepareSP(
"declare ret integer;
begin
:RETVAL := SP_RUNSOMETHING(:myid,:group);
end;");
$db->Parameter($stmt,$id,'myid');
$db->Parameter($stmt,$group,'group',false,64);
$db->Parameter($stmt,$ret,'RETVAL',true);
$db->Execute($stmt);
请注意,在 oci8 及 mssql 间只有语法上的不同,那是各数据库实作 SQL 语法问题,ADODB 对于这一部份无能为力。
如果 $type 参数被设定成 false 。在 mssql ,$type 将会动态的由 PHP 变量传来的型别决定(string => SQLCHAR, boolean =>SQLINT1, integer =>SQLINT4 或 float/double=>SQLFLT8),在 oci8,$type 可以被设成 OCI_B_FILE (Binary-File), OCI_B_CFILE (Character-File), OCI_B_CLOB (Character-LOB), OCI_B_BLOB (Binary-LOB) 及 OCI_B_ROWID (ROWID)。如果要传入空值,使用 $db->Parameter($stmt, $null=null, 'param')。
最后,在 oci8,结合参数可以重复被使用,而无需再一次呼叫 PrepareSP() 或 Parameters。但这对 mssql 是不行的。一个 oci8 的范例如下:
$id = 0; $i = 0;
$stmt = $db->PrepareSP( "update table set val=:i where id=:id");
$db->Parameter($stmt,$id,'id');
$db->Parameter($stmt,$i, 'i');
for ($cnt=0; $cnt < 1000; $cnt++) {
$id = $cnt;
$i = $cnt * $cnt; # oci8 下可以运作
$db->Execute($stmt);
}
Bind($stmt, $var, $size=4001, $type=false, $name=false)
这是一个低阶函数,只有 oci8 驱动程序支持。只有你确定系统仅支持 Oracle 否则请避免使用它。Parameter() 函数是使用结合变量的另一个建议方式。
Bind() 允许你使用结合变量在你的 sql 叙述中。这里结合一个PHP变量给一个在之前被 Prepare() 预先编译的 Oracle sql 叙述里定义的名称。Oracle 以一个冒号为开头来命名一个变量,而且 ADODB 需要一个被命名的变量去对应 :0,:1,:2,:3,等等。第一次被 Bind() 取得的将会代入 :0,而第二次将会代入 :1,依此类推。对 insert , select 及 update 指令,结合可以提供 100% 的效能提升。
在其余的参数里,$size 设定资料储存的暂存区大小,$type 是 OCI_B_FILE (Binary-File), OCI_B_CFILE (Character-File), OCI_B_CLOB (Character-LOB), OCI_B_BLOB (Binary-LOB) 及 OCI_B_ROWID (ROWID) 的类别选项。最后,代替使用预设的 :0,:1 等等名称,你可以使用 $name 来定义你自己的连结名称。
接下来的例子展示3个连结变量,使用 p1,p2及p3来结合。这些变量将会配到 :0 , :1 及 :2 。
$stmt = $DB->Prepare("insert into table (col0, col1, col2) values (:0, :1, :2)");
$DB->Bind($stmt, $p1);
$DB->Bind($stmt, $p2);
$DB->Bind($stmt, $p3);
for ($i = 0; $i < $max; $i++) {
$p1 = ?; $p2 = ?; $p3 = ?;
$DB->Execute($stmt);
}
你也可以使用名称变量:
$stmt = $DB->Prepare("insert into table (col0, col1, col2) values (:name0, :name1, :name2)");
$DB->Bind($stmt, $p1, "name0");
$DB->Bind($stmt, $p2, "name1");
$DB->Bind($stmt, $p3, "name2");
for ($i = 0; $i < $max; $i++) {
$p1 = ?; $p2 = ?; $p3 = ?;
$DB->Execute($stmt);
}
--------------------------------------------------------------------------------
ADOConnection 公用函数
BlankRecordSet([$queryid])
不再使用,本版已移除。
Concat($s1,$s2,....)
产生一个结合 $s1,$s2,..等 sql 字符串的字符串,使用了在 concat_operator 字段定义的结合运算符号。如果结合运算符号不被使用,那这个函数将无效,例如 MySQL 。
本函数回传含结合符号的字符串。
DBDate($date)
格式化 $date 成数据库可以接收的格式,这可以是一个 Unix 整数时间记录格式或是一个 ISO 格式的 Y-m-d。使用 fmtDate 字段所定义的格式。如果传入的是 null 或是 false 或是 '' ,那将会转成一个 SQL 的 null。
回传一个日期字符串。
DBTimeStamp($ts)
格式化时间记录格式的 $ts 成数据库可接受的格式。这可以是一个 Unix 整数时间记录格式或是一个 ISO 格式的 Y-m-d。使用 fmtDate 字段所定义的格式。如果传入的是 null 或是 false 或是 '' ,那将会转成一个 SQL 的 null。
回传一个时间字符串。
qstr($s,[$magic_quotes_enabled=false])
将一个字符串放在引号内,以送到数据库中。$magic_quotes_enabled 参数可能看起来很有趣,但这个想法是假设你已经用一个引号来处理了从 POST/GET 变量取来的字符串后,然后以 get_magic_quotes_gpc() 做为第二个参数。这会确定这个变量不会被引号处理二次,一次被 qstr 处理,一次被 magic_quotes_gqc。
例如: $s = $db->qstr(HTTP_GET_VARS['name'],get_magic_quotes_gpc());
回传值是一个被引号处理过的字符串。
Affected_Rows( )
回传被SQL指令更新或被删除掉的数据笔数。如果数据库不支持,回传一个 false 值。
目前 interbase/firebird 不支持本函数。
Insert_ID( )
回传最后插入时的自动增进值 ID。如果系统不支持,回传 false。
只支持有提供自动增进或对象 ID 的数据库,目前像是 PostgreSQL, MySQL 以及 MSSQL 都有。PostgreSQL 回传一个 OID,可以在数据库重加载时改变。只有使用持续连结方式,当你完成一笔交易时,这个函数才会有精确的结果。这是因为被 Execute() 宣告的连结可能和下一个 Execute() 时用的连结不同。
MetaDatabases()
回传一个在服务器中的数据库清单于数组里。首先你必需连结到服务器。目前只支持 ODBC, MySQL 及 ADO。
MetaTables()
回传目前数据库中全部资料表名称于一个数组中。如果可能,这个数组将会排除系统目录资料表。
MetaColumns($table)
回传一个 ADOFieldObject 的数组,一个字段对象对应到一个 $table 的所有行。目前 Sybase 不能辨别资料型别,ADO 不能辨识正确的资料型别(所以我们预设为 varchar)..
MetaColumnNames($table)
回传 $table 的行名于一个数组中。
--------------------------------------------------------------------------------
·显示数码图片的EXIF信息 Discuz插件ForDisc
·在PHP中cookie和session的使用总结
·哪个CMS比较好用-Mambo出鞘,谁与争锋?
·在PHP中使用Header()函数介绍
·用PHP实现JS的escape和unescape函数功能
·Cute Editor for PHP 6.0─ 一個所見即所得
·每一個 PHP 開發者都應該認識的十個開發項
·整理的Discuz程序文件目录含义表
·使用PHP伪造sessionid做防刷新功能
·用PHP显示图片的EXIF信息
·显示数码图片的EXIF信息 Discuz插件ForDisc
·在PHP中cookie和session的使用总结
·哪个CMS比较好用-Mambo出鞘,谁与争锋?
·在PHP中使用Header()函数介绍
·用PHP实现JS的escape和unescape函数功能
·Cute Editor for PHP 6.0─ 一個所見即所得
·每一個 PHP 開發者都應該認識的十個開發項
·整理的Discuz程序文件目录含义表
- · 3分钟快速了解 Delphi for PHP 特色 (中文), PDF档
- · 购买Delphi for PHP的五大理由, PDF档
- · Delphi for PHP 使用规格介绍, PDF档
- · Delphi for PHP 問答集 (From CodeGear)
- · Delphi for PHP 产品价格表




