为什么`mysqli_fetch_assoc`返回空对象?
问题描述:
我不得不调试一些遗留的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
到明显'以这种方式拯救'并且什么都不返回?我怎么会调试呢?
答
MySQL行包含一些不可打印的字符,通过MySQL
客户端连接到服务器并在该行上运行手动SELECT
来确定。
`SELECT ColumnName FROM TableName WHERE Id = SomeID`
======+==========+===========
ColumnName +========+========
=============================
http://some.site.com/??
=============================
这两个问号是赠品。
不过不知道为什么mysqli_fetch_assoc
对此不满意。
那条记录上的'$ row'究竟是什么? – Quassnoi
它可能是不相关的,但是你的'94340'这行似乎在某处丢失了一些双引号。但是,你可以'print_r($ row)'为'1251'并发布结果吗? – Ben