2

我需要将 mysql_connect() 的值保存在一个全局变量中,该变量可以在我的项目中的每个 php 文件中访问,例如$db_ServerVal = mysql_connect().

我只需要在程序开始时调用 mysql_connect 一次。

然后在每个 php 文件中——$db_ServerVal必须是有效的。不是第一次。每次。直到我打电话mysql_close( $db_ServerVal)

我可以使用$GLOBALS[]php 中的预定义数组来存储我的$db_ServerVal数据库连接吗?

另一个问题是——当浏览器窗口关闭时我需要一个“关闭”事件,这样我就会知道是时候调用mysql_close( $db_ServerVal);.

我不能mysql_close()在我的 index.php 文件的末尾调用,因为这会过早关闭数据库,然后每次我访问数据库时我都必须mysql_connect()再次访问。

虽然我可以在每次数据库调用之前mysql_connect()mysql_close()之后调用——我不确定这是否是标准的完成方式。

4

5 回答 5

2

首先,您不需要存储此变量,因为如果您省略 db_connection 参数,所有 mysql_* 函数将使用最后打开的连接。如果您要同时打开多个数据库连接,您只需要存储它。

其次,mysql 连接将在脚本结束时自动关闭。大多数情况下不需要关闭它。

第三,你不应该再使用 mysql_* 了。使用 mysqli_* 或推荐的PDO 类。

于 2011-06-10T21:45:10.480 回答
2

不要每次都关闭数据库。您甚至可以选择根本不关闭连接,因为它将在脚本结束时隐式关闭。

如果您希望能够始终连接,您可以为此编写一个函数:

$_connection = false;
function getConnection()
{
  global $_connection;
  if (!$_connection)
    $_connection = mysql_connect( ... );
  return $_connection;
}

function closeConnection()
{
  global $_connection;
  if ($_connection)
    mysql_close($_connection);
  $_connection = false;
}

当然,将连接嵌入到实际类中会更好,但这会让您开始解决问题。婴儿步。:)

于 2011-06-10T21:50:12.360 回答
1

这是来自我的 db 课程,但我认为这应该对您有所帮助。只需在第一次需要时打开并在页面末尾关闭。或者,像我一样,在你的 db 类的构造函数中连接,在析构函数中关闭。

//Constructor Code
$this->link_id = mysql_connect($this->db_host, $this->db_user, $this->db_pass);


//Destructor Code
@mysql_close($this->link_id);

这是我使用的两种方法的示例。

    //forward php4 to constructor
    function db_class() {

        return $this->__construct();
    }

    //constructor
    function __construct() {

        register_shutdown_function(array(&$this, "__destruct"));

        $this->link_id = mysql_connect($this->db_host, $this->db_user, $this->db_pass);
        mysql_select_db($this->db_name, $this->link_id);

}
    //destructor
    function __destruct() {


        @mysql_close($this->link_id);

    }
于 2011-06-10T21:44:52.937 回答
1

我通常按​​页面而不是按查询进行数据库连接调用。因此,我在需要连接的每个文件的顶部包含了用于连接数据库的文件:

require('db_connect.php');

在我在需要连接的页面上完成任何操作后关闭它。但是,您应该做什么取决于您的需求,因此从这个意义上说,这取决于您。

于 2011-06-10T21:46:01.253 回答
1

您可以将连接对象存储在全局变量中并通过 $GLOBALS 访问它。请注意,除非您使用持久连接(并且您应该知道自己在做什么),否则当您的 PHP 脚本结束时,数据库连接将自动关闭。

于 2011-06-10T21:46:40.767 回答