修补PHP 5.3.10以支持sybase_next_result()

问题描述:

数据库管理系统Sybase ASE支持多个结果集,但是PHP中Sybase的实现不支持。在这个问题上报告了一个错误,并在该报告中提供了一个补丁(https://bugs.php.net/bug.php?id=48675)。该补丁适用于5.2.9版,我试图将其添加到版本5.3.10。源代码没有警告或错误,并且测试新函数'sybase_next_result()'不会产生致命错误“调用未定义的函数”。这表明该功能已经实现,但不能按预期工作。修补PHP 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_query()' 当有多个结果集说的 “Sybase:意外的结果,在...取消当前”。第一个结果集被检索。即使没有补丁,此通知也会返回。

返回多个结果集的数据库中的存储过程的数量很大,'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版本。

有没有人有解决这个问题?

至于 //乔纳斯

更新:

一位同事给我的指示来使用 '的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'。这可能是因为之前的版本以sutch方式将'sybase_ptr'设置为'retcode'变为'CS_FAIL'。

+0

我无法解决这个问题。那些已经成功修补PHP以保存'sybase_next_result()的工作函数的人?我希望这个功能将被纳入即将发布的PHP版本。 – jbollden 2012-04-25 09:17:50