你在这里

Drupal数据库重连API函数

0
Vote up!

我们在写批处理程序时经常会遇到程序卡住的情况,而卡住又往往导致接下来的操作因为MYSQL的超时而失败,典型的报错信息就是:MySQL server has gone away。在实际工作中写出了如下代码,简单的解决了这个问题,需要确保链接仍然有效的时候,可以使用。

PHP:
/**
 * Function of reconnect active db
 */

function roi_backend_db_reactive($name = 'default') {

  // Global db url and active db
  global $db_url, $active_db;

  if (is_array($db_url)) {

    $connect_url = $db_url[$name];
  } else {

    $connect_url = $db_url;
  }

  if (preg_match("/mysqli/i", $connect_url)) {
    $connect_func = 'mysqli_ping';
  }
  else if (preg_match("/mysql/i", $connect_url)) {
    $connect_func = 'mysql_ping';
  }
  else {
    return NULL;
  }

  if (!$connect_func($active_db)) {

    // Close mysql active db
    mysqli_close($active_db);
    // Reconnect Db
    $active_db = db_connect($connect_url);

    if (function_exists('drush_log')) {

      drush_log('====== Lost database connect, Reconnected database on '.date('Y-m-d H:i:s', time()).' ======');
    }
  }

}
分类: 
版本: