2013-08-06 71 views
3

我刚刚获得了中型项目的服务端。前者通过开发引用实际 “databaseonnection.php文件有他所有的功能视为独立的PHP脚本,而不是类(func1.php,func2.php等)......所有这些“功能”作出mysqli_connect参考。这是每次运行任何脚本时创建一个新连接(每次我必须调用一个函数),而且我不想这样做。我一直在考虑建立一个长期的联系,但是我担心这个项目每天都会越来越多地越来越多地失去。那么,有没有人遇到类似的情况?处理我与数据库的连接的最佳方式是什么?任何建议将不胜感激。PHP - 有多个连接时连接数据库的最佳方法

+2

'mysql_ *'不推荐使用函数。使用'PDO'或'mysqli'。 – ops

+0

原来的方法听起来很“正常”,你确定你知道你提出的改变的含义吗? – 2013-08-06 21:14:03

+0

@Dagon我不想打开一个新的连接,每次我必须调用一个函数... – dudemanbearpig

回答

5

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

+0

谢谢。这已经过去了我的头! – dudemanbearpig

+0

请记住'mysql_connect()'是折旧为php版本5.5.0,并且在7.0.0版本中被删除,改用'mysqli_connect()' – assetCorp

1

编辑:对不起,我以为你想连接的帮助。除了将所有这些“功能”移动到仅用于连接的文件之外,没有其他办法。

我创造一个建立我的PDO连接,然后一个con.php文件包括文件的任何地方你希望使用的连接下面是一个PDO连接底座:

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

这是我的使用注意事项PDO对象进行准备查询。有以下比你需要更多,但祝你好运。

在需要连接你的PHP文件: 1:包括( '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; 
+1

这需要重新设计整个项目... – dudemanbearpig

+0

是的,但是你必须重新设计整个项目,重新使用非常过时的数据库连接功能。 – BenRacicot

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是你的主机名[通常是本地主机] $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和​​。

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

对于大多数应用程序来说,[从我的经验]做这些性能的缺点是微不足道的。这显然是一个值得商榷的说法,你也可能会发现,在这方面进一步明确自己的战略以下链接有用:

Persistent DB Connections - Yea or Nay?

编码愉快!

0

如果你有非常复杂的工程,需要大的预算重新设计,并且更喜欢很简单的改动,然后

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

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