PHP测试是否有远程MySQL服务器可用

问题描述:

我有一些使用MySQL的网站。我不是SQL专家,所以我使用简单的连接,查询等。有时(很少发生但只有数据库服务器挂起),或者我忘记打开我的家庭测试mysql。直到它再次运行,服务器挂起尝试连接,并最终发生超时错误。PHP测试是否有远程MySQL服务器可用

我尝试添加数据库服务器之前的一些测试这样的“ping”功能:

function pingDomain($domain){ 
    $starttime = microtime(true); 
    $file = fsockopen ($domain, 80, $errno, $errstr, 10); 
    $stoptime = microtime(true); 
    $status = 0; 

    if (!$file) { 
     $status = -1; // Site is down 
    } else { 
     fclose($file); 
     $status = ($stoptime - $starttime) * 1000; 
     $status = floor($status); 
    } 

    return $status; 
} 

但无论如何也不能工作,PHP挂起。有任何想法吗?

+0

你期待什么行为?你正在经历什么行为?看起来这个脚本应该阻塞(挂起)10秒钟。如果您的服务器超时时间为10秒或更少,则整个脚本将超时。 –

到处找不到一个关于关于MySQL服务器可靠和简单的测试文档。我现在使用以下方法:

@$this->Base = mysqli_init(); 
@$this->Base->options(MYSQLI_OPT_CONNECT_TIMEOUT, 1); 
@$this->Base->real_connect($host, $usuario, $senha, $bd); 

比你赶上与$这个 - >碱 - > connect_error或错误$这个 - >碱 - > connect_errno,它不会因为“@”的书面符号。

您可以使用程序形式以及:

$Link = mysqli_init(); 
mysqli_options($Link, MYSQLI_OPT_CONNECT_TIMEOUT, 1); 
$res = @mysqli_real_connect($host, $usuario, $senha, $bd); 
if($res) { 
    $E->echop("Connected!!!"); 
} else { 
    $E->echop("Huston, we got a problem..."); 
} 

评论和其他答案,欢迎!

简单使用mysql_ping:

  <?php 
      set_time_limit(0); 

      $conn = mysql_connect('localhost', 'mysqluser', 'mypass'); 
      $db = mysql_select_db('mydb'); 

      /* Assuming this query will take a long time */ 
      $result = mysql_query($sql); 
      if (!$result) { 
       echo 'Query #1 failed, exiting.'; 
       exit; 
      } 

      /* Make sure the connection is still alive, if not, try to reconnect */ 
      if (!mysql_ping($conn)) { 
       echo 'Lost connection, exiting after query #1'; 
       exit; 
      } 
      mysql_free_result($result); 

      /* So the connection is still alive, let's run another query */ 
      $result2 = mysql_query($sql2); 
      ?> 

你可能想看看这个:

+1

+1虽然最好[mysqli :: ping()](http://php.net/manual/en/mysqli.ping.php)这些天,[mysql的扩展即将被弃用](http:// php达网络/手动/ EN/faq.databases.php#faq.databases.mysql.deprecated)。 – Orbling

+0

它不起作用。在我读的时候,set_time_limit补充了php.ini中设置的超时时间(通常设置为30秒),所以它仍然挂在looong时间。但是我想到了这种方法:发现没有连接的快速错误。 – Gustavo

+0

@Orbling很快?明天?下周?即使在PHP 6 mysql_connect将如果它不,我会写你自己的函数作为封装在mysqli;) – GTodorov