2016-08-18 50 views
0

我的控制器調用請求數據庫並返回結果的方法。不要重新連接控制器調用數據庫

$connect = $this->connectBDD(); 

$rq = "SELECT naf, libelle FROM mytable WHERE naf ILIKE '$txt%'"; 
$t = $connect->prepare($rq); $t->execute(); 
$t->setFetchMode(\PDO::FETCH_OBJ); 

$tab = array(); 
while($top = $t->fetch()) { 
    $tab[] = array(
     "text" => $top->naf . ": " . $top->libelle, 
     "value" => $top->naf 
    ); 
} 

$t->closeCursor(); 

return $tab; 

問題來自第一行$ connect = $ this-> connectBDD();誰打開連接。它需要時間,約1次,而且由於這個方法經常被調用(自動完成系統),所以我需要記住連接在每次調用時不重新連接。

我試圖記住在會話

if(null === $this->app['session']->get('ac')) { 
    $this->app['session']->set('ac', $this->connectBDD()); 
} 

$connect = $this->app['session']->get('ac'); 


$rq = "SELECT naf, libelle FROM mytable WHERE naf ILIKE '$txt%'"; 
$t = $connect->prepare($rq); $t->execute(); 
$t->setFetchMode(\PDO::FETCH_OBJ); 

$tab = array(); 
while($top = $t->fetch()) { 
    $tab[] = array(
     "text" => $top->naf . ": " . $top->libelle, 
     "value" => $top->naf 
    ); 
} 

$t->closeCursor(); 

return $tab; 

$連接,但它更糟糕的是,因爲如果我有一個無限循環......

所以,我怎麼能叫我的方法,無需重新連接數據庫在每次打電話?

感謝您的幫助

+0

持久連接爲什麼它連接了一整秒?你的數據庫服務器在同一臺計算機上嗎?如果是這樣 - 你嘗試127.0.0.1而不是本地主機? –

+0

沒有它調用一個不同的服務器 – Macbernie

回答

1

試圖在connectBDD

$dbh = new PDO('....', $user, $pass, array(
    PDO::ATTR_PERSISTENT => true 
)); 

http://php.net/manual/en/pdo.connections.php

+0

是啊,很好,我的連接(行$ connect = $ this-> connectBDD();)需要〜0.33 seconde而不是1 seconde來建立連接 – Macbernie

+0

但似乎並非如此快速的持續連接,不是嗎? – Macbernie

+0

@Macbernie它與永久連接完全沒有關係,但網絡延遲似乎是一個巨大的延遲。 –