我正在为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;
}
}
答案 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)
答案 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();