2016-11-25 131 views
-1

我知道如何設置一個函數的時間間隔,並試圖在這種情況下使用它,但我無法讓它工作。這是我的代碼。我需要它每5秒做一次SELECT語句。如何使PHP SQL SELECT語句每隔5秒查詢一次?

$Select = "SELECT * FROM Messages ORDER BY ID DESC LIMIT 10"; 
$Result = $Connect->query($Select); 

if (mysqli_num_rows($Result) > 0) { 
    while($Row = mysqli_fetch_assoc($Result)) { 
     echo "ID " . $Row["ID"] . " MSG " . $Row["Message"] . "<BR>"; 
    } 
} 
+3

什麼都行不通。沒有一個真正有用的描述,_could不能讓它工作_ – RiggsFolly

+0

做一個CRON,每分鐘運行,然後讓自己循環運行60秒循環內睡眠5秒。 – chris85

+0

我試過這個,但用if語句,它沒有工作:setInterval(function(){//要執行的方法;},5000); – Alanay

回答

0

這可以使用PHP的sleep()來完成。我真的不會建議這樣做,因爲它不像JS setInterval()。 PHP不像JS那樣是異步的。

<?php 
    function setInterval($func, $seconds) { 
     while(TRUE) { 
      $func(); 
      sleep($seconds); 
     } 
    } 

    setInterval(function() { 
     global $Connect; 
     $Select = "SELECT * FROM `Messages` ORDER BY `ID` DESC LIMIT 10"; 
     $Result = $Connect->query($Select); 

     if(mysqli_num_rows($Result) > 0) { 
      while($Row = mysqli_fetch_assoc($Result)) { 
       echo 'ID ' . $Row['ID'] . ' MSG ' . $Row['Message'] . '<br>'; 
      } 
     } 
    }, 5); 
?> 

你最好的選擇是使用AJAX來此加載到使用JS setInterval()方法的窗口,假設你正在用<br/>標記你想這顯示在HTML中。

+1

只是一個註釋:這將鎖定自PHP同步運行以來的時間間隔。如果你想把它和其他一些工作一起處理,你應該使用線程。線程在PHP> 5中可用,使用PECL'pthread'擴展和(可能)共享內存擴展;但與C或其他中級語言的核心線程處理並沒有太大區別。看到這個http://php.net/manual/en/book.pthreads.php – Cunning

+0

爲什麼有人會投下我的答案? OP想要一個「純PHP」解決方案,我提供了一個。我建議不要使用它,並建議更適用的方法。我真的希望人們能夠提供反饋,告訴他們爲什麼不投票給出答案! – Daerik