2016-04-27 443 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對此不滿意。

相關問題