odbc_fetch_array()php中的分段错误(核心转储)错误

时间:2016-11-04 12:39:06

标签: php sql-server-2008 odbc

我在Segmentation Fault(core dumped)收到odbc_fetch_array错误。虽然我通过在全局启动的odbc_exec变量中执行($resultSet)MSSQL查询来获得1500个结果,但我尝试获取每一行并使用odbc_fetch_array将其存储到数组中while循环。当我尝试运行脚本时,从1500行开始,首先获取7行并将其存储在数组中。但在此之后出现Segmentation Fault(core dumped)错误并停止提取过程。

以下是我正在使用的代码:

$i=1;
$display_data = array();

while($data = odbc_fetch_array($this->ressultSet))
{
    $display_data[$i] = $data ;
    $i++;
}

任何人都可以帮忙解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以在https://bugs.php.net/bug.php?id=61387&edit=1找到此错误。

我已将问题隔离到odbc_fetch_array()以查找包含的结果集 具有NULL值的匿名(未命名)列。如果NULL值是别名 (" SELECT NULL as SOMETHING")没有崩溃。如果是匿名的(未命名的) 列包含除NULL以外的任何内容,没有崩溃。

测试脚本:

$sql = 'SELECT NULL';

$c = odbc_connect('Driver=SQL Server Native Client 
11.0;server=hpesc1;uid=xxx;pwd=xxx;Database=xxx','','');

$e = odbc_exec($c, $sql);

$row = odbc_fetch_array($e);

以下是将会或不会使PHP崩溃的SQL的不同组合:

$sql = 'SELECT NULL'; // PHP SEGFAULT

$sql = 'SELECT NULL as [one]'; // OK

$sql = 'SELECT 1'; // OK

$sql = 'SELECT 1, NULL'; // SEGFAULT

$sql = 'SELECT 1, NULL as [two]'; // OK

我在我的查询中解决了这样的问题:

SELECT * FROM foo ORDER BY id ASC

希望它有所帮助,

马哥。