我将使用mysqli_close($connection)
关闭$connection
。但在结束之前,我需要确保相关的连接是开放的。
我试过
if($connection)
{
mysqli_close($connection);
}
但它不起作用。任何解决方案?
答案 0 :(得分:26)
老问题,但可能会帮助别人。 这来自PHP.net。
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
/* check if server is alive */
if ($mysqli->ping()) {
printf ("Our connection is ok!\n");
} else {
printf ("Error: %s\n", $mysqli->error);
}
/* close connection */
$mysqli->close();
?>
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* check if server is alive */
if (mysqli_ping($link)) {
printf ("Our connection is ok!\n");
} else {
printf ("Error: %s\n", mysqli_error($link));
}
/* close connection */
mysqli_close($link);
?>
答案 1 :(得分:3)
如果您打开一个连接,它将保持打开状态,直到它显式关闭或脚本结束(除非启用了持久连接)。使用你的代码应该可以工作。
一个选项是扩展mysqli
类并拥有一个名为$connected
的状态属性:
class CustomMysqli {
public $connected;
public function __construct($host, $username, $password, $dbname) { // db info
$conn = new mysqli($host, $username, $password, $dbname);
if (!$conn->connect_errno) {
$this->connected = true;
}
return $conn;
}
public function close($conn) {
if ($this->connected) {
$conn->close();
$this->connected = false;
}
}
}
检查$connected
属性有点过分,但会确保连接仍处于打开状态。
答案 2 :(得分:3)
您可以检查是否设置了 mysqli 服务器信息。
$connection = new MySQLi('localhost', 'user', 'pass', 'db');
if(!isset($connection->server_info)){
echo 'sql connection is closed';
}else{
$connection -> close();
}
答案 3 :(得分:2)
虽然有人建议检查$connection->ping()
,$connection->stat()
或mysqli_thread_id($connection)
,但如果之前关闭连接,则三者将抛出:“Couldn't fetch mysqli
”。
对我有用的解决方案是:
if(is_resource($connection) && get_resource_type($connection)==='mysql link'){
$connection->close(); //Object oriented style
//mysqli_close($connection); //Procedural style
}
PS:仅在受控环境中检查resource是否足够。
答案 4 :(得分:1)
检查连接错误。 mysqli_connect()总是返回一个MySQLi对象。
使用它:
$mysqli_connection = new MySQLi('localhost', 'user', 'pass', 'db');
if ($mysqli_connection->connect_error) {
echo "Not connected, error: " . $mysqli_connection->connect_error;
}
else
{
echo "Connected.";
}
答案 5 :(得分:0)
试试这个:
function close_connection(){
$thread = $mysqli->thread_id;
$mysqli->close();
$mysqli->kill($thread);
}
这将关闭您使用面向对象样式打开的连接,如下所示:
$mysqli = new mysqli($db_server, $db_username, $db_password, $db_name);
这是基本的想法,但如果您使用的是程序样式,我相信您将能够根据需要自定义代码。
答案 6 :(得分:-2)
在ping之前先检查是否存在连接
注意!!!
总是做您的工作并明确关闭您的连接,因为在php通过脚本结束将其关闭之前,其他事情可能会出错
<?php
$link = mysqli_connect("localhost", "username", "pwd", "mydatabase");
if (
$link // has a connection ?
&& mysqli_ping($link) // is it connected ?
) {
mysqli_close($link)
}
?>
答案 7 :(得分:-3)
不要关闭它。那将是最好的解决方案。