2016-08-18 22 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它与永久连接完全没有关系,但网络延迟似乎是一个巨大的延迟。 –