数据库管理系统Sybase ASE支持多个结果集,但是PHP中的Sybase实现却不支持。此问题报告了一个错误,该报告中还提供了一个补丁(https://bugs.php.net/bug.php?id=48675)。该补丁适用于5.2.9版本,我试图将其添加到5.3.10版本。源构建时没有警告或错误,测试新函数'sybase_next_result()'不会产生致命错误“调用未定义函数”。这表明函数已实现,但未按预期工作。
配置是:
configure --disable-isapi --enable-debug-pack --without-mssql --without-pdo-mssql --without-pi3web --with-mcrypt=static --disable-static-analyze --enable-cli --with-sybase-ct=%SYBASE%\%SYBASE_OCS%
当有多个结果集说“Sybase:意外结果,取消当前...”时,'sybase_query()'上有一个通知。检索第一个结果集。即使没有补丁,也会返回此通知。
数据库中返回多个结果集的存储过程数量很大,而'sybase_next_result()'将是最佳解决方案。简而言之,我在PHP 5.3.10中为Sybase寻找等效于'mssql_next_result()'(http://se2.php.net/manual/en/function.mssql-execute.php)。
值得注意的是,Sybase实现的其他部分已经到位,并且看起来按预期工作。
我的测试环境是WAMP服务器(Windows 7,Apache 2.21,MySQL 5.5.20,PHP 5.3.10),Sybase ASE是15.7.0版本。
那里有没有人“解决”过这个问题?
关心 //乔纳斯
答案 0 :(得分:1)
<强>更新强>
一位同事给了我使用'OutputDebugString()'的指示(http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362(v=vs.85).aspx)并抓住使用DebugView(http://technet.microsoft.com/en-us/sysinternals/bb896647)。
从这里我可以说'sybase_next_result()'被调用但是块
if (sybase_ptr->active_result_index) {
...
}
未运行。这可能是正确的(我认为)。
行
retcode = ct_results(sybase_ptr->cmd, &restype);
始终将'retcode'设置为'CS_FAIL'。这可能是因为早期的
ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, sybase_link_index, id, "Sybase-Link", le_link, le_plink);
以sutch方式设置'sybase_ptr','retcode'变为'CS_FAIL'。