for ($i=0; $i < $max; $i++)
$DB->Execute($stmt,array((string) rand(), $i));PrepareSP($sql) 在 mssql 驱动程序里,预编译预储程序必需要透过一个特别的函数来调用 mssql_init(),这个动作目前由本函数来处理了。PrepareSP() 可以在所有的驱动程序由被调用,而且以调用 Prepare() 的方式来模拟。使用范例请参考以下的 Parameter() 说明。 和上面的 Prepare() 返回一样的阵列或 $sql 字串。 Parameter($stmt, $var, $name, $isOutput=false, $maxLen = 4000, $type = false ) 在运作中增加一个结合参数。目前相容于 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 的行名于一个阵列中。
ADORecordSet(数据集)上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页 [MySql]PHP存取 Mysql 数据乱码终极解决方案 [Web开发]PHP提示Notice: Undefined variable的解决办法 [Web开发]PHP 大小写函数 [Web开发]PHP的sleep函数关闭窗口后是否继续运行? [Web开发]教你如何在PHP开启gzip页面压缩实例介绍 [Web开发]PHP过滤HTML字符串的常用函数使用方法介绍 [Web开发]PHP采集程序常用函数大全 [Web开发]用PHP实现Javascript的escape(),unescape()的方法 [Web开发]常见的PHP截取字符串函数整理 [系统软件]突破Windows 2003 PHP服务器的新思路
|