2017-11-04 85 views
1

我有一個簡單的機器人(我使用webhook),它響應命令並進入數據庫併發送一個貼紙和一個簡單的html消息找到每個記錄。電報機器人:循環數據庫查詢

如果有很多記錄(20個以上AND花了2分鐘以上完成bucle)bot變瘋狂並且顯示結果4次(結束一次,然後再次開始3次),我試圖添加一個sleep()計時器以避免循環但沒有運氣。不知道我錯過了什麼或做錯了什麼。

這裏是我的代碼:當服務器端認爲有被丟棄

$update = json_decode(file_get_contents('php://input')); 

if (isset($update->message)){ 

//Fetching update 
$message = $update->message; 
$message_id = $update->message->message_id; 
$text = $message->text; 
$chat_id = $message->chat->id; 

    switch($text){  
    case "read": 
     $age = 18; 
     read_fields($age, $chat_id); 
     break; 

    default: 
     bot('SendMessage',[ 
      'chat_id' => $chat_id, 
      'text' => "This is a test" 
     ]); 
    } 
} 

function read_fields($age, $chat_id){ 
    include("conexion.inc"); 

    $i = 0; 
    $sticker = ""; 
    $id = ""; 
    $name = ""; 

    $sql = "SELECT id, name, sticker FROM Persons WHERE age = ".$age; 
    $php = mysql_query($sql, $con); 
    while($row=mysql_fetch_assoc($php)){ 

     $sticker = $row['id_sticker']; 
     $id = $row['id']; 
     $name = $row['name']; 

     bot('sendSticker',[ 
      'chat_id' => $chat_id, 
      'sticker' => $id_sticker 
     ]); 

     $message = $id."-<b>".$name."</b>"; 

     bot('SendMessage',[ 
      'chat_id' => $chat_id, 
      'parse_mode' => "HTML", 
      'text' => $mensaje 
     ]); 

     sleep(3); 

     $i++; 
    } 

    bot('SendMessage',[ 
     'chat_id' => $chat_id, 
     'text' => "### ".$i." total ### " 
    ]);  

} 

回答

0

電報博特API將重試網絡掛接的要求,所以你需要減少響應時間。

一個解決方案是快速處理它們,但它似乎並不容易。

如果您知道如何在超時前關閉HTTP連接,只需執行此操作,因爲它的實現方式與HTTP服務器不同,因此請嘗試像NginX fastcgi close upstream connection那樣進行搜索。

+0

所以,我可以嘗試使數據範圍更快地顯示。 我的意思是,如果我有50條記錄,我可以調用read_fields函數3次,分別顯示20,20和10。 現在的問題是,我如何將該範圍傳遞給查詢? –