在多个函数运行查询时连接到数据库的有效方法

时间:2013-08-16 01:26:34

标签: mysql database database-connection

我正在编写一个应用程序,其中包含一个javascript文件通过Ajax访问的 functions.php 文件。目前我有每个功能连接到数据库,运行查询,然后关闭数据库。我知道必须有一种更有效的方法。我想只输入一次数据库凭据,然后让所有函数使用它。什么是最有效的方法呢?我在这里已经阅读了很多关于这个主题的答案,但它们都是不同的,我迷失了。请指出我正确的方向:)

目前我的职能是像这样打开数据库。

$db = new mysqli("hostname", "username", "password");
$db -> select_db("database name");

或者像这样

mysql_connect("hostname", "username", "password");
mysql_select_db('database name') or die( "Unable to select database");

2 个答案:

答案 0 :(得分:1)

简单的答案是连接池。连接池是始终连接到数据库的连接池。您可以为连接数设置高水位线和低水位线。

当您的应用程序从池请求连接时,它将使用其中一个空闲连接并重新使用它。这就是扩展数据库连接的方式。

您正在使用PHP,请查看以下内容:

  1. http://www.oracle.com/technetwork/topics/php/php-scalability-ha-twp-128842.pdf
  2. http://php.net/manual/en/mysqlnd-ms.pooling.php
  3. 网上有很多相关信息。

答案 1 :(得分:0)

您只需检查数据库连接变量是否已设置:

if (!isset($db)) {
    $db = new mysqli(...);
    $db->select_db("database_name");
}

mysql_connect类似(它返回一个连接资源,因此您可以将其分配给变量,即使它是其他函数的可选参数)。

另一种方法是使用带有静态变量的函数:

function connect_db() {
    static $db = new mysqli(...);
    static $selected = $db->select_db("database_name");
    return $db;
}

第三个选项是在脚本开头连接一次数据库,而不是在每个函数中连接。然后将$db传递给每个函数,或者使用global $db;访问它。