2015-04-22 82 views
1

我使用了一個名爲MyMysqli以瞬移,使查詢類等可以多次連接db連接嗎? PHP - MySQL的

MyMysqli.php:

... 
public function query($query){ 
    $this->total_queries++; 
    $result= mysqli_query($this->conection, $query); 
    if(!$result){ 
     echo "Error: " . mysqli_error($this->conection); 
     exit; 
    } 
    return $result; 
} 
... 
... 
     public function free(){ 
      mysqli_free_result($this->result); 
     } 
... 

而且我還有其他的類來定義用戶。 它裏面,我有一個公共的功能來修改用戶的一些數據:如果用戶存在

public function makeActive($id){ 
    if($this->userExists($id)){ 
     $db = new MyMysqli; 
     $db->query("UPDATE users SET userActive =1 WHERE idUser=".$id); 
     $db->free(); 
     return 1; 
    } 
    return 0; 
} 

而且功能userExists //檢查:

public function userExists($id){ 
    $db = new MyMysqli; 
    $db->query("SELECT idUser FROM users WHERE idUser=".$id); 
    if($db->num_rows($db->query) === 1){ 
     return 1; 
    } 
    return 0; 
    $db->free(); 
} 

所以,你可以看到,我在函數中調用新的MyMysqli 2次,可以這麼做嗎?或者我不應該使用另一個函數來檢查用戶是否存在,包括檢查makeActive函數?

謝謝你的幫助!

+1

如果你希望得到答案,你應該把這些代碼片段翻譯成英文。要回答你的問題,在連接數據庫,連接東西一次,然後多次使用該連接時會有開銷。 – EJTH

+0

你應該只打開一個連接到數據庫每頁請求,除非你想問題 – developerwjk

+0

翻譯,謝謝! @developerwjk,即使我自由結果?,謝謝! –

回答

1

我的解決方案是使用mysqli persistant連接。

當您創建與mysql的連接時,請使用以下示例。

mysqli_connect('p:servername', 'username', 'password', 'database', port); 

要打開連接時,你必須在前面加上p:到主機的持久連接。


根據文檔 http://php.net/manual/en/mysqli.persistconns.php

背後持久連接的想法是,一個 客戶端進程和數據庫之間的連接可以通過一個客戶機進程可以重複使用, 而不是被創建和銷燬多次。這減少了每次需要時創建新連接的開銷, 因爲未使用的連接被高速緩存並準備好被重用。

1

從它看起來像(我可能是錯的)它看起來像一個實用方法的集合,它可能會更好地將連接傳遞到每個方法,以便您可以跨不同的連接使用它們具有相同的架構,這也將有助於您的多個連接,因爲您只需要爲每個數據庫維護一個連接。