我有一些函数采用可选的$connection
参数(默认为null)。如果它未设置或为空,我想重新打开或生成新的数据库连接,所以我执行此检查:
if(empty($connection) || mysqli_connect_errno() || !mysqli_ping($connection)) $connection = connect();
我的connect()
功能如下,但基本上它返回mysqli_connect
资源:
function connect() {
$hostname = getDBHostname();
$dbusername = getDBUsername();
$dbpassword = getDBPassword();
$dbname = getDBDatabase();
$connection = mysqli_connect($hostname, $dbusername, $dbpassword);
if($connection == false) {
die('Database Connection Initialization Failed');
}
else if($connection->connect_error) {
die('Fatal DB Connect Error ('.$connection->connect_errno.') '.$connection->connect_error);
}
$test = mysqli_select_db($connection, $dbname);
return $connection;
}
这些导致了一堆警告:
Warning: mysqli_ping(): Couldn't fetch mysqli in /var/www/html/project/functions.php on line 123
我意识到传递mysqli_ping
一个mysqli_connect
$link
是一个错误而不是mysqli
个对象,但是我怎么可能检查我的{{} {1}}对象已设置并打开?如果不是,请打开它?
答案 0 :(得分:0)
好的,所以这是我的答案:
mysqli_ping文档说:
检查与服务器的连接是否正常。如果它已经关闭... 长时间处于空闲状态的客户端可以使用此功能,以检查服务器是否已关闭连接并在必要时重新连接 。
问题是你假设mysqli_ping
在手动关闭连接时会起作用,但是这个功能不起作用。
如果手动关闭连接,该对象仍然存在,但指向此功能/方法无法ping或重新打开的已关闭连接。就像关闭它之后使用$connection->ping()
一样。
当你说:
我意识到通过mysqli_ping mysqli_connect $链接是一个mysqli对象的错误......
这不正确。连接对象(由mysqli_connect
返回或使用mysqli构造函数创建)是函数接受的唯一类型或参数。
您可以尝试:
或者
unset($connection)
关闭连接变量后取消设置。我希望它有所帮助。