2017-11-04 56 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。 现在的问题是,我如何将该范围传递给查询? –