PHP Codeigniter 3 MySQL服务器已经消失

时间:2015-07-24 13:13:28

标签: php mysql codeigniter

我正在为Codeigniter中的PHP脚本运行Cron Job来转换上传的视频。一切都执行没有任何问题,但一旦它将数据插入数据库,我收到此错误:

Error Number: 2006 MySQL server has gone away

该过程基本上转换视频,如果成功,则从视频创建缩略图和海报,然后将视频数据插入数据库。我尝试在我的模型函数中添加$this->db->reconnect();。这是功能:

function add_video($data)
{
  //BECASUE THE CONVERSION TAKES SO LONG WE NEED TO RECONNECT TO THE DATABASE AFTER EACH EXEC
  $this->db->reconnect(); 

  $this->db->insert('video_uploads', $data);
}

这不起作用我仍然收到错误。如果我在每次$this->db->reconnect();之后添加exec,我会收到以下错误:

Message: mysql_ping() expects parameter 1 to be resource, boolean given

Message: mysql_real_escape_string() expects parameter 2 to be resource, boolean given

正如我所使用的那样,我使用FFMPEG来转换我的视频。

如何在所有执行完成后保持连接处于活动状态,以便将数据插入数据库?

编辑:这是Codeigniter的$this->db->reconnect();函数的样子:

public function reconnect()
{
    if (mysql_ping($this->conn_id) === FALSE)
    {
        $this->conn_id = FALSE;
    }
}

5 个答案:

答案 0 :(得分:1)

为避免此错误,您可以写

$this->db->database();

之前打电话

$this->db->reconnect();

答案 1 :(得分:1)

对我来说,这是我迁移服务器并且没有完全设置mysql的数据库文件中的设置。在mysql中,我使用ssl连接到服务器。

有一次我评论说以下一切都运作良好。

$db['default']['options'] =  array(
    PDO::MYSQL_ATTR_SSL_KEY  => $_SERVER['DOCUMENT_ROOT'].'/application/third_party/client-key.p$
    PDO::MYSQL_ATTR_SSL_CERT => $_SERVER['DOCUMENT_ROOT'].'/application/third_party/client-cert.$
    PDO::MYSQL_ATTR_SSL_CA   => $_SERVER['DOCUMENT_ROOT'].'/application/third_party/ca-cert.pem'
  );

我开始禁用库和其他自动加载的文件,直到我推断它不是导致问题的模型或控制器。一旦我禁用了数据库库,我没有收到500服务器错误或mysql错误。检查我的连接设置后,我意识到导致问题的原因。

答案 2 :(得分:0)

检查连接是否更容易,并在需要时重新建立连接。

有关该信息的信息,请参阅PHP:mysqli_ping

reference

答案 3 :(得分:0)

出于不同的原因,我遇到了类似的问题 - 我正在用>努力锤击数据库。 12,000个选择/更新。 mysql服务器刚刚放弃并“去度假”

无论如何,在我添加的循环中,只需要一点时间就可以了:

if ($this->db->conn_id->ping() === FALSE)
{
    sleep(1);
    $this->db->reconnect();
}

答案 4 :(得分:0)

在某些情况下,$this->db->reconnect();引发错误。我不确定为什么会出错。我会在知道答案后更新答案。但是,现在要解决这种问题,您实际上可以在下面进行操作:

替换:

$this->db->reconnect();

使用:

$this->db->close();
$this->db->initialize();