2013-08-29 59 views
0
if (isset($_POST['update'])){ 
    $db=mysqli_connect("localhost","****","****","****"); 
    $lasttime = isset($_POST['timestamp']) ? $_POST['timestamp'] : 0; 
    while (1){ 
     sleep(1); 
     clearstatcache(); 
     $mresult = mysqli_query($db,"SELECT * FROM tblchat WHERE msg_datetime > $lasttime"); 
     if (!empty($mresult)){ break; } 
    } 
    $msgs = array(); 
    while ($row = mysqli_fetch_object($mresult)) { $msgs[] = $row; } 
    mysqli_free_result($mresult); 
    $response = array(); 
    $response['msgs'] = $msgs; 
    echo json_encode($response); 
    flush(); 
    mysqli_close($db); 
    exit(); 
    } 

該代碼是與客戶端進行長輪詢連接的服務器。如果請求更新,則while循環將檢查隨更新請求一起發送的時間戳後收到的任何新消息。如果找到,它會將結果放入數組中並將其回顯給客戶端。 由此產生的輸出是這樣的[msgs:[{msg_from:"",msg_to:"",msg:"",msg_datetime:""},{msg_from:"",msg_to:"",msg:"",msg_datetime:""}]]MYSQLi SELECT抓取對象

該代碼第一次正常工作,併發送所有最近消息封裝良好,但它再次發送一個空的消息數組。請指導我。

+1

不錯的SQL注入 –

+0

很高興看到人們遷移到MySQLi或PDO,但他們不斷注入他們的變量直接查詢,而不是正確地使用準備好的語句;( – Prix

+0

可以請你只是重寫我的代碼中的兩個查詢正確,我想一次學習如何防止SQL注入 –

回答

0

解決了mysqli_num_rows

if (mysqli_num_rows($mresult)){ $msgs = array(); while ($row = mysqli_fetch_object($mresult)) { $msgs[] = $row; } mysqli_free_result($mresult); break; } 
if (mysqli_num_rows($wresult)){ $writers = array(); while ($row = mysqli_fetch_object($wresult)) { $writers[] = $row; } mysqli_free_result($wresult); break; }  

感謝大家對他們的幫助的問題!