PHP - 有多个连接时连接数据库的最佳方法

时间:2013-08-06 21:10:26

标签: php mysql mysql-connect

我刚刚收购了中型项目的服务方面。前开发人员将他的所有功能都作为单独的PHP脚本而不是类(func1.php,func2.php等)......所有这些“函数”通过引用实际来引用mysqli_connect 'databaseonnection.php'文件。这是每次运行任何脚本时创建一个新连接(每次我必须调用一个函数),我不想这样做。我正在考虑建立一个持久的连接,但我担心它会失控,因为项目每天都在增长。那么,有没有人遇到类似的情况?处理我与数据库的连接的最佳方法是什么?任何建议都将不胜感激。

4 个答案:

答案 0 :(得分:5)

来自mysql_connect的文档。如果使用相同的参数对mysql_connect()进行第二次调用,则不会建立新的链接,而是返回已打开的链接的链接标识符。

答案 1 :(得分:1)

编辑:对不起我以为你想要连接帮助。除了将所有这些“函数”移动到一个仅为其连接的文件中之外,没有办法。

我创建了一个con.php文件,其中建立了我的PDO连接,然后在您希望使用连接的任何地方包含该文件以下是PDO连接的基础:

$PDO = new PDO("mysql:host=localhost;dbname=dbname", "user_name", "password");

以下是关于使用PDO对象进行准备查询的说明。下面有你需要的东西,但祝你好运。

在需要连接的PHP文件中:         1:include('con.php');

2:  $datas = $PDO->prepare(SELECT * FROM table WHERE title LIKE :searchquery);
    // prepare method creates and returns a PDOstatment object ( print_r($datas); ) which contains an execute() method
    // PDOstatment object has its own methods ie. rowCount()

    // $datas->bindValue(':search', '% . $search . %', )
    // Optional - Manually bind value. see http://php.net/manual/en/pdostatement.bindparam.php

3: $datas->execute( array(':searchquery' => $searchquery . '%'));
    // pass in values that need to be bound AND EXECUTE.

    // There are 17 ways to "fetch" data with the PDO object.
4: $datas-fetchALL(PDO::FETCH_OBJ);

通过句柄关闭pdo连接:

$PDO = null;

答案 2 :(得分:0)

我认为使用PDO而不是旧MYSQL功能会更好mysql_connect。它的界面更加强大。

以下是执行此操作的基本代码:

$db_handle = new PDO("mysql:host=".$db_host.";dbname=".$db_name.";port=".$db_port."", $db_username, $db_password, $connect_options);

其中$db_handle是表示数据库连接的PDO对象,$db_host是您的主机名[通常是localhost],$db_name是您的数据库的名称,$db_port是数据库端口号[通常为3306],$db_username$db_password是您的数据库用户访问凭据,$connect_options是可选的驱动程序特定的连接选项。

要启用持久连接,您需要在打开连接之前为其设置特定于驱动程序的连接选项:$connect_options = array(PDO::ATTR_PERSISTENT => true);然后执行早期的数据库连接代码。

您可以在此处的PHP文档中获取有关此内容的更多信息:http://www.php.net/manual/en/pdo.construct.phphttp://php.net/manual/en/pdo.connections.php

关于创建持久连接,我建议您通过使数据库句柄无效来关闭在脚本末尾打开的每个数据库连接(在所有数据库操作之后):$db_handle = NULL;。无论是否打开持久连接,都应该这样做。这听起来有点违反直觉,但我相信你应该在脚本完成后释放任何数据库资源。

根据我的经验,这样做的性能缺点对大多数应用来说都是微不足道的。这显然是一个有争议的断言,您可能还会发现以下链接有助于进一步澄清您在这方面的策略:

  

Persistent DB Connections - Yea or Nay?

快乐的编码!

答案 3 :(得分:0)

如果你有非常复杂的项目,需要很大的预算来重新设计,而且更喜欢非常简单的改动

1)留在mysqli_connect 2)将数据库连接移动到脚本的标题。 3)删除该函数上的函数数据库close()。 4)删除连接链接变量,单个数据库不需要它。 5)关闭页脚末尾的数据库。

通过这种方式,数据库连接在启动脚本时建立,在所有查询之后,它将在页脚上关闭。您的服务器可以使用keepalive方法处理连接而无需关闭/重新打开。基本上默认的keepalive值是30到90秒。