2014-01-07 56 views
2

我使用的C 1 -C學說在這裏...背景PHP函數處理

我有3個表名爲exchange_rateexchangerate_batchagents

exchange_rateexchangerate_batch有多對一的關係,'代理'與exchangerate_batch有多對一的關係。

在更新exchange_rate表時,將不同國家的更新率作爲新的利率與舊利率一起添加,並創建新的exchangerate並與匯率鏈接。

代理表由主代理和子代理在同一個表上,它們作爲一對多而在相同的表上相關。

我沒有任何問題插入和生成新的批處理ID。真正的問題開始於我必須更新代理表上每個代理和子代理上exchangerate_batch表的新創建ID時。不同代理商的匯率不同。我需要搜索特定代理的所有子代理並更新exchangerateatch的ID。

一種解決方案是在後臺運行代理更新時運行插入的匯率和批次並重定向到同一頁面,以便用戶不必等待進程繼續。

我們該怎麼做。我聽說shell_exec可以做到,但不知道如何使用它。任何關於PHP的想法如何使用後臺進程,以便我可以在後臺更新代理表。

對不起,麻煩,,

回答

0

寫您的更新命令在一個單獨的PHP文件(或任何其他應用程序)

隨着殼牌執行在PHP案例:

shell_exec('<pathto>php.exe -f <pathto>script.php'); 

在otherhand有一個很好的擴展「PThreads」。您可以使用它開始後臺進程,並可以在此之後進行同步。

http://www.php.net/manual/en/book.pthreads.php

class BackgroundSql extends Thread { 
    private $_sql; 
    public $result; 

    public function __construct($sql){ 
     $this->_sql = $sql; 
    } 

    public function run() { 
     //Execute your Query with your Db Class and Save Result 
     $this->result = $Db::Query($this->_sql); 
    } 
} 

$updateCommand = new BackgroundSql('Update ... SET ... = ...'); 

if ($updateCommand->start()) { 

    /* do some work */ 
    sleep(10); 

    /* ensure we have data */ 
    $updateCommand->join(); 

    var_dump($updateCommand->result); 
} 

編輯:更加具體

+0

是線程一個PHP庫函數? – user1140176

+0

這是一個擴展,請參閱我的鏈接。 –