我需要将mysql_connect()的值保存在全局变量中,该全局变量可在我的项目中的每个php文件中访问例如CCD_ 1。
我只需要能够在程序开始时调用mysql_connect一次。
然后在每个php文件中——$db_ServerVal
必须是有效的。这不是第一次了。每次。直到我呼叫mysql_close( $db_ServerVal)
;
我可以使用php中预定义的数组$GLOBALS[]
来存储我的$db_ServerVal
数据库连接吗?
另一个问题是,当浏览器窗口关闭时,我需要一个"关闭"事件,这样我就知道是时候给CCD_ 6打电话了。
我不能在index.php文件的末尾调用mysql_close()
,因为这将关闭数据库过早,然后每次访问数据库时,我都必须再次使用mysql_connect()
。
虽然我可以在每次数据库调用前后调用mysql_connect()
和$db_ServerVal = mysql_connect()
0,但我不是当然,如果这是做事的标准方式。
首先,您不需要存储此变量,因为如果省略db_connection参数,mysql_*函数的所有部分都将使用最后打开的连接。如果要同时打开多个数据库连接,则只需要存储此信息。
其次,mysql连接将在脚本结束时自动关闭。在大多数情况下没有必要关闭它。
第三,你不应该再使用mysql*了。使用mysqli_*或推荐的PDO类。
不要每次都关闭数据库。您甚至可以选择根本不关闭连接,因为它将在脚本结束时隐式关闭。
如果你想随时连接,你可以为此编写一个函数:
$_connection = false;
function getConnection()
{
global $_connection;
if (!$_connection)
$_connection = mysql_connect( ... );
return $_connection;
}
function closeConnection()
{
global $_connection;
if ($_connection)
mysql_close($_connection);
$_connection = false;
}
当然,将连接嵌入到实际的类中会更好,但这会让您开始解决问题。小步。:)
这来自我的db类,但我认为这应该会对您有所帮助。只需在第一次需要时打开,然后在页面末尾关闭即可。或者,像我一样,在db类的构造函数中有connect,在析构函数中有close。
//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);
}
我通常在每页的基础上进行数据库连接调用,而不是在每个查询的基础上。因此,我在每个需要连接的文件的顶部都包含了进行数据库连接的文件:
require('db_connect.php');
当我在页面上做了任何需要连接的事情后,请关闭它。然而,你应该做什么是基于你的需求,所以从这个意义上说,这取决于你。
您可以将连接对象存储在全局变量中,并通过$GLOBALS访问它。请注意,除非您使用持久连接(如果这样做,您应该知道自己在做什么),否则当PHP脚本结束时,数据库连接将自动关闭。