我试图让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';
答案 0 :(得分:0)
经过很多麻烦之后,我通过选择另一种做事方式找到了答案。我下载了最新的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)
返回Adodbrecordset_array_mssqlnative对象,而不是数组,在我的代码中,我用来显示和操作值
while (!$rs->EOF) {
$rs['row']->value;
$rs->MoveNext();
}
现在他们应该
$rs->fields['row'];
另一个棘手的问题是将fields数组与我的查询中的列名相关联,但经过短暂的搜索我发现了
$GLOBALS['conn']->SetFetchMode(ADODB_FETCH_ASSOC);
瞧,瞧!一切正常,甚至是缓存。
这个裸优化需要脚本执行时间从1秒到0.1甚至有时为0.005。