3

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

4

4 回答 4

5

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

于 2013-08-06T21:18:15.443 回答
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;
于 2013-08-06T21:18:34.847 回答
0

我认为使用PDOMYSQL功能(例如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.php和http://php.net/manual/en/pdo.connections.php .

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

[根据我的经验] 这样做的性能劣势对于大多数应用程序来说可以忽略不计。这显然是一个有争议的断言,您可能还会发现以下链接有助于进一步阐明您在这方面的策略:

持久的数据库连接——是还是不是?

快乐编码!

于 2013-08-06T21:56:55.563 回答
0

如果您有非常复杂的项目并且需要大量预算来重新设计,并且更喜欢非常简单的改动,那么

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

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

于 2013-12-25T06:11:27.070 回答