2016-04-27 373 views
2

我不得不调试一些遗留的PHP代码,我打了一个真正的困惑。为什么`mysqli_fetch_assoc`返回空对象?

一种方法循环遍历MySQL表的每一行,并将该行添加到数组中。

不幸的是,该方法返回一个完全空的对象,所以HTTP响应是零长度的。

在调用mysqli_fetch_assoc时,似乎MySQL表中的一个特定行导致了此问题。我通过在下面的测试代码中添加缩小到1251行。

$counter = 0 
while ($row = mysqli_fetch_assoc($findInfo)) { 

    // My Debug Test Code: bail out and return row 1251 
    if ($counter == 1251) 
    return $row; // this returns a populated array for all rows except 1251, which is blank 

    // Add the row to our array 
    array_push($rowArray, $row); 

    $counter = $counter + 1 
} 

// Finally, do something with all the rows 
return $rowArray 

如果我生成的数据表的.CSV转储,数据看上去还算无伤大雅 - 1251排在下面的代码片段开始94340行:

94339,"Hills Coaches (Wolverhampton)",,,,,,,,,,,,,,,, 
94340,"Hinckley Bus",,"via contact form at www.arrivabus.co.uk/contact-arriva/  ","01455 239329",,,"5 Jacknell Road, Dodwells Bridge Industrial Estate, Hinckley LE10 3BS",,,,,,,,,,www.arrivabus.co.uk/hinckleybus/#http://www.arrivabus.co.uk/hinckleybus/# 
94341,Hirethisbus.com,,,,,,,,,,,,,,,, 

什么可能导致mysqli_fetch_assoc到明显'以这种方式拯救'并且什么都不返回?我怎么会调试呢?

+1

那条记录上的'$ row'究竟是什么? – Quassnoi

+0

它可能是不相关的,但是你的'94340'这行似乎在某处丢失了一些双引号。但是,你可以'print_r($ row)'为'1251'并发布结果吗? – Ben

回答

0

MySQL行包含一些不可打印的字符,通过MySQL客户端连接到服务器并在该行上运行手动SELECT来确定。

`SELECT ColumnName FROM TableName WHERE Id = SomeID` 

======+==========+=========== 
ColumnName +========+======== 
============================= 
http://some.site.com/?? 
============================= 

这两个问号是赠品。

不过不知道为什么mysqli_fetch_assoc对此不满意。

相关问题