我在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++;
}
任何人都可以帮忙解决这个问题吗?
谢谢!
答案 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
希望它有所帮助,
马哥。