2016-02-27 34 views
1

我想這樣當我加載頁面,它會開始從MySQL的每一秒(mysql的查詢)5(行冷卻淡入效果,如果可能)。使我的代碼異步,所以它不需要永久加載

我使用此代碼來顯示所有已結婚玩家和他們的合作伙伴的列表,我的數據庫有很多合作伙伴,我正在使用API​​將他們的UUID轉換爲他們的用戶名,這需要很長時間才能加載& convert ,所以我需要把它變成異步。

我還在學習PHP btw!

最後,這裏是代碼:

$mysql = mysql_connect('localhost', 'root', ''); 
mysql_select_db("marry",$mysql); 
$result = mysql_query("SELECT player1,player2 FROM marriage_marriages"); 
$rows = mysql_num_rows($result); 


if ($rows) { 
echo '<div class="col-lg-12"><table class="table"> <h2>Married Players</h2><thead><tr><th>User 1</th><th>User 2</th></tr></thead><tbody>'; 

while ($row = mysql_fetch_assoc($result)) { 
echo '<tr>'; 


echo '<td>'. file_get_contents("http://api.mcusername.net/uuidtoplayer/".str_replace('-', '', '' . $row["player1"] . '')) .'</td>'; #user1 


echo '<td>'. file_get_contents("http://api.mcusername.net/uuidtoplayer/".str_replace('-', '', '' . $row["player2"] . '')) .'</td>'; #user1 
echo '</tr>'; 
} 
echo '</tbody></table></div>'; 
+0

你爲什麼用mysql函數編寫這段代碼?你沒注意到[docs](http://php.net/manual/en/function.mysql-query.php)中的大色警告嗎? – trincot

+0

對不起沒有。我對PHP很陌生,並且我一直在學習很多東西。我用phpmyadmin爲我的數據庫使用MySQL。 –

+0

我不是在談論MySql作爲數據庫(這很好!),而是關於「mysql _.....」函數,這些函數是舊的,不推薦的,不被維護的,並且在PHP7中不受支持。改用mysqli或PDO。 – trincot

回答

2

而不是試圖讓這個異步的,認爲可以節省大量的時間,如果你只要在數據庫中存儲的球員名字你將值插入它。

我建議你創建一個球員表,這將有UUID關鍵和爲第二個柱。

每次插入新的玩家進入該表,因爲你擁有它對於一個給定UUID值做查找現在:

$name = file_get_contents("http://api.mcusername.net/uuidtoplayer/".str_replace('-', '', '' . $uuid . '')); 

然後完成與這兩個值的刀片(1假設MySQLi函數):

$stmt = $mysqli->prepare("INSERT INTO players (uuid, name) VALUES (?, ?)"); 
$stmt->exec($uuid, $name); 

如果你這樣做了所有玩家,那麼你的婚姻查詢是:

SELECT  a.name, b.name 
FROM  marriages m 
INNER JOIN players a 
     ON m.player1 = a.uuid 
INNER JOIN players b 
     ON m.player2 = b.uuid 

現在,您不需要在構建表時調用耗時的名稱查找。

這將帶來巨大的性能提升。

+0

嗨,我想知道是否有可能在PHP中進行異步調用? –

+1

@NidhinDavid,看到[這個問題](http://stackoverflow.com/questions/13846192/php-threading-call-to-a-php-function-asynchronously)。但請記住,瀏覽器實際上正在等待PHP響應,並且不會允許用戶在PHP完成之前進行交互。尋找解決方案時,JavaScript會通過AJAX實現這些異步調用。這是如何完成的。 – trincot

+0

感謝您的信息 –