2014-04-25 20 views
0

我有一個相當大的調用,我必須加入4個表並獲得50行。當我在我的PHP服務器上拉動它時,它會在0.0013秒內拉出,這很好。所以我嘗試從我的iOS設備調用PHP來獲取記錄,有時候我會得到它們,有時我會得到一半。PHP只返回mysql_query的一半結果

這是我的PHP SQL代碼。

$sql = "SELECT NF.id, NF.type, NF.groupid, NF.classid, NF.videoid, NF.lessonid, NF.text, NF.path, NF.datetime, Groups.name as groupname, Groups.imagepath as groupimage, Classes.title as classname, Classes.imagepath as classimage, Videos.title as videoname, Videos.videopath as videopath, Lessons.title as lessonname, Lessons.imagepath as lessonimage 
    FROM NewsFeed as NF 
    LEFT OUTER JOIN Groups on (NF.groupid=Groups.id) 
    LEFT OUTER JOIN Classes on (NF.classid=Classes.id) 
    LEFT OUTER JOIN Videos on (NF.videoid=Videos.id) 
    LEFT OUTER JOIN Lessons on (NF.lessonid=Lessons.id) 
    WHERE $searchstring 
    ORDER BY NF.datetime DESC LIMIT 50"; 

$request = mysql_query($sql) or die(mysql_error()); 

$arr = array(); 

if(mysql_num_rows($request)){ 
    while($obj = mysql_fetch_object($request)) { 
     $arr[] = $obj; 
    } 
} 

// Return Array 
echo '{"newsfeed":'.json_encode($arr).'}'; 

mysql_close($link); 

現在,當我附和json_encoded陣列,有時我從「新聞源」開始整個數組:和其他時間我得到的是這樣的:

2014年4月24日23: 07:09.574 ProgramName [6573:60b]我們的編程理論......「,」路徑「:」http://site.com/LMS/NewsFeedPictures/IMG2014170220465189.PNG「,」datetime「:」2014-02-17 20 :46:56「,」groupname「:」iOS的LMS「,」groupimage「:」http://site.com/LMS/GroupThumbnails/LMS.jpg「,」classname「:null,」classimage「:null, 「videoname」: ... (並且越來越多的記錄直到結束。)

正如你所看到的,內容字符串開始的地方是我的數據的中間!

所以問題是爲什麼PHP只返回部分數據?

回答

0

做一些檢查,雙重檢查和一些更多的測試我來到conslusion,這不是我的PHP畢竟,這是我的NSURLConnection的經過。

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 

你不能依靠這種方法帶回整個數據,它會在某些場合中斷。因此,你必須實現一個NSMutableData集並追加像這樣的數據...

if(arrData != nil){ 
    [arrData appendData:data]; 
} 

而且在連接沒有完成委託,做到這一點...

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ 

    if (arrData != nil) { 
     //Some method to return or use arrData 
     arrData = nil; 
    } 
} 

這樣,你總是會收到完整的數據。感謝@Robotys的幫助和新工具!

0

我以前見過這個。

我當時的罪魁禍首是一個雙引號(「)在從MySQL返回的數據中的字符串。當它在JS調用到達它無效JSON字符串。

嘗試驗證從產生的JSON經過許多json validator。我最喜歡的PHP是jslint

+0

所以我做了一個error_log中(json_encode($ ARR)),並把它的JSLint和JSON是有效的。但是當腳本回應json時,我的應用程序只收到破損的數據......我決定解決這個問題。感謝提示,我會更經常地使用jslint。 – DrRocker

+0

已注意。然後另一個理論是json字符串在服務器和客戶端之間被削減了一半。爲了證明這一點,請嘗試回顯除json字符串以外的大字符串,並在客戶端js中查看它。 如果它像json字符串一樣被減半,那麼我們可以確認在數據傳輸過程中發生了什麼(這不太可能),並且可以繼續深入研究。 – Robotys

+0

迴響一個非常長的字符串,它沒有分裂。這可能是我回應陣列的方式嗎? – DrRocker