PDO ODBC连接Sybase ASE15.7时fetchAll异常及Apache崩溃求助
PHP PDO-ODBC连接Sybase ASE 15.7后fetchAll返回异常及Apache崩溃问题
问题背景
将服务器上的Sybase客户端从15.0版本升级至15.7版本后,使用PHP的PDO对象通过ODBC连接Sybase ASE 15.7数据库时出现两类异常问题。
具体现象
- 部分SELECT语句在自定义函数中调用
fetchAll()后,函数内通过print_r()能正常打印查询结果,但通过return返回该结果时,外部接收变量无有效数据; - 若注释掉
fetchAll()相关代码,直接给返回变量赋值字符串(如'TEST'),return能正常返回数据; - Apache服务出现崩溃,同时ODBC管理员(odbcad32.exe)也出现崩溃,事件日志记录APPCRASH错误,异常代码均为c0000005(内存访问违规)。
示例代码
function GetData($host,$user,$passwd) { $zaz = []; try { $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, ]; $pdo = new PDO($host, $user, $passwd, $options); $sqlTmp = 'SELECT * FROM xxx WHERE kzak=:kzak AND popzak=:popzak'; $bindTmp = array( 'kzak' => (int) 2327, 'popzak' => 'letter' ); $pdostmt = $pdo->prepare($sqlTmp); if ($pdostmt->execute($bindTmp) !== false) { //$zaz='TEST'; $zaz = $pdostmt->fetchAll(PDO::FETCH_ASSOC); print_r($zaz); // 此处能正常输出数据 } } catch (PDOException $e) { echo 'error: ' . $e V这拓展的vism KitA politician 弗成穿MS,正文)echo 'error: ' . $e->getMessage(); } finally { return $zaz; // 返回结果无有效数据 } } $data = GetData($HOSTC,$USERC,$PASSWDC); var_dump($data);
事件日志错误信息
Apache崩溃日志
ConsentKey=APPCRASH AppName=Apache HTTP Server ig[0].Name=Application Name Sig[0].Value=httpd.exe Sig[1].Name=Application Version Sig[1].Value=2.4.55.0 Sig[2].Name=Application Timestamp Sig[2].Value=63c44299 Sig[3].Name=Fault Module Name Sig[3].Value=VCRUNTIME140.dll Sig[4].Name=Fault Module Version Sig[4].Value=14.0.24123.0 Sig[5].Name=Fault Module Timestamp Sig[5].Value=574290ad Sig[6].Name=Exception Code Sig[6].Value=c0000005 Sig[7].Name=Exception Offset Sig[7].Value=0000dd5b
ODBC管理员崩溃日志
ConsentKey=APPCRASH AppName=ODBC Administrator AppPath=C:\Windows\syswow64\odbcad32.exe Sig[0].Name=Application Name Sig[0].Value=odbcad32.exe Sig[1].Name=Application Version Sig[1].Value=10.0.20348.1 Sig[2].Name=Application Timestamp Sig[2].Value=f4e4d789 Sig[3].Name=Fault Module Name Sig[3].Value=MSVCR80.dll Sig[4].Name=Fault Module Version Sig[4].Value=8.0.50727.9680 Sig[5].Name=Fault Module Timestamp Sig[5].Value=6090c909 Sig[6].Name=Exception Code Sig[6].Value=c0000005 Sig[7].Name=Exception Offset Sig[7].Value=00012339
当前环境
- Apache版本:2.4.55
- PHP版本:已尝试5.6.9、5.6.40、8.2.7
- Sybase ASE版本:15.7,客户端从15.0升级至15.7
请问有没有人遇到过类似问题?是否知晓解决方案?感谢解答!
内容的提问来源于stack exchange,提问作者user22107564
相关产品推荐
相关产品推荐

