3

数据库管理系统 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 版。

有没有人已经“解决”了这个问题?

关于//乔纳斯

4

1 回答 1

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);

以 'retcode' 变为 'CS_FAIL' 的 sutch 方式设置 'sybase_ptr'。

于 2012-04-20T13:32:33.547 回答