我正在为我的大学项目在PHP中创建一个简单的Web应用程序。我正在使用MySQL数据库。
我在login.php中连接到数据库。连接后,我将连接分配给$ _SESSION [“conn”],然后重定向到main.php。
在main.php中我写了$ conn = $ _SESSION [“conn”]。但$ conn中的连接不起作用。
我认为当login.php脚本结束时,连接会关闭。所以我尝试使用mysql_pconnect而不是mysql_connect,但这也不起作用。
我知道我可以在每个PHP文件中重新连接到数据库。但我不想这样做。我想在所有PHP文件中使用相同的连接。
答案 0 :(得分:9)
不是在会话中保存数据库连接,而是应该在单独的文件(如db.php)中进行连接调用,然后从每个脚本中请求它。例如,将连接放在db.php中:
mysql_connect('...', '...', '...');
mysql_select_db('...');
然后将其带入login.php:
require('db.php');
$res = mysql_query('...');
然后,您可以对需要访问数据库的每个PHP文件执行相同操作,并且您只需在一个文件中更改数据库访问凭据。
答案 1 :(得分:6)
连接后,我将连接分配给$ _SESSION [“conn”],然后重定向到main.php。
您可能希望阅读PHP sessions。您无法在会话中存储资源(数据库连接,文件句柄等),因为它们不能serialized并存储。
请记住,每次访问PHP脚本都会调用PHP解释器的新实例(通过CGI,通过FastCGI或通过内置模块),并调用脚本的新实例。脚本调用之间没有任何共享,因为当脚本退出时整个环境都会消失。
其他答案是正确的 - 您需要在每次脚本调用时连接到数据库。为方便起见,将连接放在公共包含文件中。
答案 2 :(得分:2)
第二个请求可能不会由与第一个请求相同的Web服务器进程提供,这意味着您将拥有一组完全独立的数据库资源。您需要在此新流程中再次连接才能运行查询。
答案 3 :(得分:0)
我通常拥有的是一个Connection类,为了建立连接,页面将需要这个类。有点像:
class Connection {
public $dbConnection = null;
public $isConnectionActive = false;
private $dbServer = null;
private $dbCatalog = null;
private $dbUser = null;
private $dbPassword = null;
}
此类处理在任何页面上打开和关闭连接。
答案 4 :(得分:0)
听起来你想以这种方式使你的php连接持久化,如果是这样,那么你必须创建一个带有所需参数的PDO对象来创建一个新的PHP PDO对象,它将尝试连接到mysql并且在对象实例中,尝试将持久性选项值传递给true,您可能在每个PHP脚本中都可以使用相同的PDO Connection Objetc,但最终会遇到问题...但它不会被重新认为是PHP编程最佳实践......最好的方法是为项目中的每个脚本包含一个连接文件。阅读Persistant Connections的PHP文档,以了解有关这些连接对象的问题的更多信息,尤其是对于最近的php版本。 PHP宣布Persistant Connections正在从futur版本中删除,因为它可能会因持续的资源而增加服务器工作量...对不起,如果为时已晚