下面是我的数据库连接类。问题是,当我尝试从我的代码访问CloseConnection函数时,它会给出错误:“Unknown MySQL localhost”。我通过其他代码文件使用“dbconnection :: CloseConnection”。它成功打开连接,但在“$ conn”中出错。
final class dbconnection
{
private $conn;
//Opens connection for a MySQL DB
public static function OpenConnection()
{
require("../Config/dbconfig.php");
$conn = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
mysql_select_db('MyDB');
}
//Closes connection for a MySQL DB
public static function CloseConnection()
{
mysql_close($conn);
}
}
下面是我访问上述函数的另一个PHP文件中的方法:
public static function InsertRecord($inQuery)
{
dbconnection::OpenConnection();
$resultSet = mysql_query($inQuery);
dbconnection::CloseConnection();
return $resultSet;
}
当我删除行“dbconnection :: CloseConnection()”时,它工作正常。我还想知道在DB任务完成后立即关闭连接是否是一个好习惯,还是应该保持打开直到用户关闭浏览器?
答案 0 :(得分:2)
尝试:
class dbconnection {
private static $conn;
public static function OpenConnection() {
require("../Config/dbconfig.php");
self::$conn = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
mysql_select_db('MyDB');
}
public static function CloseConnection() {
mysql_close(self::$conn);
}
}
你正在做的是尝试访问成员变量$conn
,但你做错了,所以你只是创建一个新的(本地)变量来使用。这在open上无关紧要(引用被简单地丢弃)但是在关闭时你不再处理资源引用了。
其次,您的函数是静态的,但您的成员变量不是。这些是用于访问成员变量的两种方法:
class A {
private $a;
private static $b;
public static function foo() {
$this->a = 3; // instance member
self::$b = 4; // static member
}
}
关于最后一个函数的 编辑,当您删除对CloseConnection()
的调用时它会起作用,因为它不再尝试通过局部变量$conn
访问数据库连接(这会导致错误)。
立即关闭数据库连接并不是一个好习惯。 PHP中最常见的做法是在脚本顶部打开一个连接,然后不再执行任何操作。当脚本退出时,它将关闭。有些人按需打开连接,这意味着在需要之前不会尝试创建连接。这是可接受的优化(从不增加不必要的复杂性的角度来看)。通常,连接永远不会被明确关闭。当脚本结束时,它将被隐式关闭。
长期存在的脚本可能希望采用不同的方法,因此它们不会在不必要的情况下长时间保持打开的连接。
您可能在某些时候想要使用持久连接。
上述方法足够简单,足以满足一些非常大的网站的需求。作为一般规则,不要尝试优化这些内容并引入不必要的复杂性,直到您确实遇到需要执行某些操作的问题。