pcntl_fork 导致 MySQL server has gone away 解决方案
生活随笔
收集整理的這篇文章主要介紹了
pcntl_fork 导致 MySQL server has gone away 解决方案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
pcntl_fork 前連數據庫,就會報 MySQL server has gone away 錯誤。原因是子進程會繼承主進程的數據庫連接,當mysql返回數據時,這些子進程都可以通過這個連接讀到數據,造成數據錯亂。
該操作數據庫的地方還是要操作數據庫; 要解決這個問題,要在?$pid?=?pcntl_fork(); ?前清理掉之前的MySQL連接;?
官方文檔的解釋以及解決方案
http://php.net/manual/en/function.pcntl-fork.php#70721
?
于是我如上嘗試,咦,還是不行啊~~再仔細看一下代碼,發現不對勁~~要在?$pid?=?pcntl_fork(); ?前清理掉之前的MySQL連接,為什么上面的代碼是$db?=?mysql_connect($server,?$username,?$password); ~~
于是,我在?$pid?=?pcntl_fork(); 之前改成 disconnet ~ ?
$model_mod = new Model_Base();$model_mod->disconnect();$pid = pcntl_fork();//父進程和子進程都會執行下面代碼if ($pid == -1) {//錯誤處理:創建子進程失敗時返回-1.die('could not fork');} else if ($pid) {$model_mod->connect();//父進程會得到子進程號,所以這里是父進程執行的邏輯pcntl_wait($status); //等待子進程中斷,防止子進程成為僵尸進程。} else {//子進程得到的$pid為0, 所以這里是子進程執行的邏輯。}
最后成功解決這個問題~~
?
轉載于:https://www.cnblogs.com/AllenChou/p/6607182.html
總結
以上是生活随笔為你收集整理的pcntl_fork 导致 MySQL server has gone away 解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中的static关键字的用法
- 下一篇: java的线程中断