Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:mysqli\u connect vs mysqli:mysqli\u ping检查打开的连接_Php_Mysqli_Database Connection - Fatal编程技术网

PHP:mysqli\u connect vs mysqli:mysqli\u ping检查打开的连接

PHP:mysqli\u connect vs mysqli:mysqli\u ping检查打开的连接,php,mysqli,database-connection,Php,Mysqli,Database Connection,我有一些函数采用可选的$connection参数(默认为null)。如果未设置或为空,我希望重新打开或生成一个新的数据库连接,因此我执行以下检查: if(空($connection)| mysqli|u connect|errno()| | |!mysqli|u ping($connection))$connection=connect() 我的connect()函数如下,但基本上它返回一个mysqli\u connect资源: function connect() { $hostname

我有一些函数采用可选的
$connection
参数(默认为null)。如果未设置或为空,我希望重新打开或生成一个新的数据库连接,因此我执行以下检查:

if(空($connection)| mysqli|u connect|errno()| | |!mysqli|u ping($connection))$connection=connect()

我的
connect()
函数如下,但基本上它返回一个
mysqli\u 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;
}
这导致了一系列警告:

警告:mysqli_ping():无法在第123行的/var/www/html/project/functions.php中获取mysqli


我意识到传递
mysqli\u ping
a
mysqli\u connect
$link
是对
mysqli
对象的错误,但是我怎么可能检查我的
mysqli\u connect
对象是否已设置并打开?
如果未设置,请打开它?

好的,下面是我的答案:

mysqli_ping文档中说:

检查与服务器的连接是否正常工作。如果它下降了。。。此功能可供长时间处于空闲状态的客户端使用,以检查服务器是否已关闭连接,并在必要时重新连接

问题是,您假设手动关闭连接时,
mysqli\u ping
将正常工作,但该函数不是这样工作的

如果手动关闭连接,则对象仍然存在,但指向无法通过此函数/方法ping打开或重新打开的已关闭连接。就像在关闭连接后使用
$connection->ping()
一样

当你说:

我意识到传递mysqli\u ping一个mysqli\u connect$链接是对mysqli对象的错误

这是不对的。连接对象(由
mysqli\u connect
返回或使用mysqli构造函数创建)是函数接受的唯一类型或参数

您可以尝试:

  • 在脚本结束之前不关闭连接

  • 每次使用
    unset($connection)
    关闭连接变量后,都将其取消设置

我希望这能有所帮助。

好吧,下面是我的答案:

mysqli_ping文档中说:

检查与服务器的连接是否正常工作。如果它下降了。。。此功能可供长时间处于空闲状态的客户端使用,以检查服务器是否已关闭连接,并在必要时重新连接

问题是,您假设手动关闭连接时,
mysqli\u ping
将正常工作,但该函数不是这样工作的

如果手动关闭连接,则对象仍然存在,但指向无法通过此函数/方法ping打开或重新打开的已关闭连接。就像在关闭连接后使用
$connection->ping()
一样

当你说:

我意识到传递mysqli\u ping一个mysqli\u connect$链接是对mysqli对象的错误

这是不对的。连接对象(由
mysqli\u connect
返回或使用mysqli构造函数创建)是函数接受的唯一类型或参数

您可以尝试:

  • 在脚本结束之前不关闭连接

  • 每次使用
    unset($connection)
    关闭连接变量后,都将其取消设置

我希望它能有所帮助。

尝试将$connection作为全局变量。让我问你一个问题:在脚本中的任何时候,在执行所有操作之前,你是否自己使用mysq_close()或$connection->close()关闭连接?全局可能是一种有效的解决方法,但它并不能严格回答这个问题。是的,我确实调用mysqli_close,有可能发生这种情况,然后再次尝试连接。这就是为什么我想在它关闭时重新打开它(或者完全生成一个新连接),这是mysqli_-ping应该做的,但是对于不同的对象类型(mysqli_-ping需要一个mysqli对象,但我正在使用mysqli_-connect对象)。尝试将$connection作为全局变量。让我问你一个问题:在脚本中的任何时候,在执行所有操作之前,您是否自己使用mysq_close()或$connection->close()关闭连接?Global可能是一种有效的解决方法,但它不能严格回答这个问题。是的,我确实调用mysqli_close,有可能发生这种情况,然后再次尝试连接。这就是为什么我想在它关闭时重新打开(或者产生一个新的连接),这是mysqli_-ping应该做的,但是对于不同的对象类型(mysqli_-ping需要一个mysqli对象,但我正在使用mysqli_-connect对象)。在任何给定的
mysqli_-close($connection)
调用之后,我已经在执行
unset($connection)
了,后续问题:您总是传递$connection参数,还是在某些函数中忽略它?后续操作:它是否总是显示警告,还是仅在传递或忽略时才显示警告?另外,我希望您不要在其范围外取消$connection对象的设置,就像在您正在使用的某个函数内一样。因为这样做只会取消本地$connection,而不会取消全局$connection,除非它是通过
&
操作符的引用传递的。我仍在跟踪它,但它看起来似乎在传递时只显示警告,但即使这样也可能不总是--仍在查看。我不是通过引用来传递,但我的设计是,只有在一开始没有通过引用的情况下,它才会关闭。想法是:你给我发了一个连接?好的,我会用它,别管它。你没送我一个?我会得到我自己的,等我完成后把它毁掉。我希望你能把这个打倒。我仍然建议不要使用
mysqli\u connect\u errno()
check,因为您的连接似乎很好