在不同的PHP页面中使用相同的MySQL连接

问题描述:

我正在为我的大学项目创建一个简单的PHP Web应用程序。我正在使用MySQL数据库。在不同的PHP页面中使用相同的MySQL连接

我在login.php中连接到数据库。连接后,我将连接分配给$ _SESSION [“conn”],然后重定向到main.php。

在main.php中我写$ conn = $ _SESSION [“conn”]。但$ conn中的连接不起作用。

我认为,随着login.php脚本结束,连接被关闭。所以我尝试使用mysql_pconnect而不是mysql_connect,但这也不起作用。

我知道我可以重新连接到每个PHP文件中的数据库。但我不想这样做。我想在所有PHP文件中使用相同的连接。

+2

避免(不惜一切代价)保存这样的对象在http会话 – cherouvim 2010-02-14 15:51:57

+1

@cherouvim - 考虑到你*无法*节省资源到会议开始,这是一种奇怪的事情说。 – Charles 2010-02-14 15:56:30

+0

@Charles:我的意思是商店。不知道这是否在PHP中可行。 – cherouvim 2010-02-14 18:15:24

而不是在会话中保存数据库连接,你应该在一个单独的文件,如db.php中进行连接调用,然后从每个脚本中获取它。例如,将您的连接在db.php中:

mysql_connect('...', '...', '...'); 
mysql_select_db('...'); 

,然后在login.php中把它在:

require('db.php'); 
$res = mysql_query('...'); 

然后,您可以做同样为需要访问的每个PHP文件数据库,你只能在一个文件中更改你的数据库访问凭证。

+0

聪明的裤子:)不错的一个! – 2013-02-23 09:13:07

第二个请求可能不是由第一个请求提供服务,这意味着您将拥有一组完全独立的数据库资源。您需要在此新进程中重新连接才能运行查询。

连接后我将连接分配给$ _SESSION [“conn”],然后重定向到main.php。

你可能要阅读PHP sessions。您不能将资源(数据库连接,文件句柄等)存储在会话中,因为它们不能被serialized存储。请记住,每次访问PHP脚本时都会调用PHP解释器的新实例(通过CGI,通过FastCGI或通过内置模块),并调用脚本的新实例。脚本调用之间不会共享任何内容,因为脚本退出时整个环境会消失。

其他答案是正确的 - 您需要在每次脚本调用时连接到数据库。为了方便起见,将连接放在一个通用的包含文件中

我平时所拥有的是一个Connection类,它需要页面来建立连接。沿线的东西:

class Connection { 
    public $dbConnection = null; 
    public $isConnectionActive = false; 
    private $dbServer = null; 
    private $dbCatalog = null; 
    private $dbUser = null; 
    private $dbPassword = null; 
} 

该类处理任何页面上连接的打开和关闭。

这听起来是你想让你的PHP连接持久化,这样,如果是这样,那么你必须创建一个PDO对象与所需的参数来创建一个新的PHP PDO对象,将尝试连接到mysql,在对象实例中,尝试将持久性选项值传递给true,您可能会在每个php脚本中使用相同的PDO Connection Objetc,但是您最终会以这种方式面对问题...但它不会被重新编译为PHP Programming Best Pratices ...这样做的最佳方式是为项目中的每个脚本包含一个连接文件。阅读持久连接的PHP文档,了解更多关于这些连接对象的问题,特别是最近的php版本。 PHP宣布Persistant连接正在从未来版本中删除,因为它可能会增加服务器工作负载与持久资源...很抱歉,如果它太晚