Php adodb CacheExecute com_exception参数类型错误


Php adodb CacheExecute com_exception arguments wrong type

我正在尝试让ADODB缓存工作。我有一个php脚本,用于定义数据库连接。

global $conn;
$conn = new COM ("ADODB.Connection");
$connStr = "PROVIDER-SQLOLEDB;SERVER=;UID=;PWD=;DATABASE=);
$conn->open($connStr);

我省略了不必要的细节。

然后在其他脚本中,我导入connection.php,然后尝试进行正常查询。

$query = "SELECT * from table where some_id = 21540 and other_id = BOGUS_INFO"
$rs = $GLOBALS['conn']->CacheExecute(60,$query);

这将返回未捕获的异常"com_exception"。。ADODB.Connection参数的类型错误、超出可接受的范围或与其他参数冲突。

我很困惑,因为下一行代码可以完美地工作。

$rs = $GLOBALS['conn']->execute($query); //OK!

有什么想法吗?我也尝试了CacheGetOne,但我得到了同样的错误。这可能是我在下面定义这个东西的方式吗?(在我的代码中就是这样)

$GLOBALS['ADODB_CACHE_DIR']=$_SERVER['DOCUMENT_ROOT'].'/../cache/adodb';

经过一番折腾,我选择了另一种做事方式,找到了答案。我下载了最新的ADODB版本。将其插入我的项目中,并相应地修改了文件:

connection.php更改为:

require('PATH/adodb.inc.php');
require('PATH/adodb-csvlib.inc.php');//read somewhere that i need this for the caching executes
$GLOBALS['ADODB_CACHE_DIR'] = $_SERVER['DOCUMENT_ROOT'].'/cache/adodb';
global $ADODB_CACHE_DIR; //don't know which one adodb usese really to identify cache directory so for safety - both
$ADODB_CACHE_DIR = $_SERVER['DOCUMENT_ROOT'].'/cache/adodb';
$conn = NewADOConnection('mssqlnative');//i tried first with mssql simple but script terminated execution on execute() attempt.. no error.. no nothing.. no output .. strange
$conn->Connect($myServer, $myUser, $myPass, $myDb);

在那之后,我不得不篡改代码,因为

$rs = $conn->CacheExecute(time,query) 

返回Adodyrecordset_array_mssqlnative Object,而不是数组,在我的代码中,我曾将值显示和操作为

while (!$rs->EOF) {
$rs['row']->value;
$rs->MoveNext();
}

现在他们应该是

$rs->fields['row'];

另一件棘手的事情是让字段数组与查询中的列名称相关联,但经过短暂的搜索,我发现了

$GLOBALS['conn']->SetFetchMode(ADODB_FETCH_ASSOC);

瞧!一切正常,即使是缓存。通过这种裸优化,脚本执行时间从1秒到0.1,有时甚至0.005。