1. 程式人生 > >PHP連線mysql後pcntl_fork產生的錯誤

PHP連線mysql後pcntl_fork產生的錯誤

最近使用PHP做多程序上傳碰到了一個問題,上傳完成以後寫入資料庫時報錯:Packets out of order. Expected 1 received 0. Packet size=4131940

也有可能是:MySQL server has gone away

總之可能是這種各樣奇怪的錯誤

思考了一下,考慮到PDO是在主程序中建立的,因此fork後多個子程序使用的是同一個PDO連線,如果有兩個子程序同時使用該連線與資料庫通訊,那麼就可能因為通訊協議時序的不正確導致mysql出現異常

為了驗證該想法,寫了一個測試程式抓包看了一下

$dsn = "mysql:host={$host};dbname={$dbName};port={$port};charset=utf8";
$dbh = new PDO($dsn, $user, $pswd);

for ($i=0; $i < 2; $i++) { 
	$pid = pcntl_fork();
    if ($pid == -1) {
        throw new \Exception("Fork process error!", 1);
    }
    if ($pid == 0) {    // child
        $sth = $dbh->query("select * from test_table");
        exit(0);
    }
}


從抓包結果可以看到兩個子程序確實是使用的同一個tcp連結,其中61是客戶機,178是服務機

知道了原因,解決起來就好辦了,不要使用主程序中建立的mysql連線,進入子程序了以後再重新建立新的mysql連線就不會出現這種問題了

參考連結:https://bugs.php.net/bug.php?id=67061

相關推薦

PHP連線mysqlpcntl_fork產生錯誤

最近使用PHP做多程序上傳碰到了一個問題,上傳完成以後寫入資料庫時報錯:Packets out of order. Expected 1 received 0. Packet size=4131940 也有可能是:MySQL server has gone away 總之可

php連線MySQL產生錯誤:mysqlnd cannot connect to MySQL 4.1+ using old authentication

1.本人開發PHP使用的是appserv-win32-2.6.0.exe,其中PHP版本是6.0.0-dev,MySQL版本是 6.0.4-alpha-community-log。在使用PHP連線資料庫是產生了如下錯誤: Warning: mysql_connect() [

PHP 連線mysql資料庫

報錯: Warning: mysqli::mysqli(): (HY000/2002): No such file or directory <span style="font-size:18px;">cd /var sudo mkdir m

PHP連線MySql閃斷自動重連的方法

使用php作為後臺執行程式(例如簡訊群發),在cli模式下執行php,php需要連線mysql迴圈執行資料庫處理。 當mysql連線閃斷時,之後迴圈的執行將會失敗。 我們需要設計一個方法,當mysql閃斷時,可以自動重新連線,使後面的程式可以正常執行下去。 1.建立測試資料表 CREATE&nbs

php連線mysql報錯mysql_connect(): Access denied for user 'root'@'localhost' (using password: YES)

mysql_connect(): Access denied for user ‘root’@‘localhost’ (using password: YES) 1、連線密碼輸錯,檢查程式碼 2、wamp中因root密碼修改,而導致 路徑:****\phpmyadmin4.1.14 檔案

php連線mysql時報錯The mysql extension is deprecated and will be removed in the future

首先 可以成功連線,但是會報錯, The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead。。。 如下: 意思很明顯了啊,mysql_connect在將來的

jdbc連線mysql資料庫報時區錯誤和SSL連線錯誤

錯誤1:時區錯誤 報錯資訊: com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone value '?й???????' is unrecognized or represe

jdbc連線mysql時報時區設定錯誤解決方法

參考https://blog.csdn.net/zqb765720343/article/details/80076020,感謝分享。 jdbc連線mysql時報時區設定錯誤,提示相差8小時。 1、在mysql命令列模式下修改時區,經過嘗試發現,這種方法重啟mysql後就失效了,不是永久的。

PHP連線Mysql常用API(mysql,mysqli,pdo)區別與聯絡

什麼是API? 一個應用程式介面(Application Programming Interface的縮寫),定義了類,方法,函式,變數等等一切 你的應用程式中為了完成特定任務而需要呼叫的內容。在PHP應用程式需要和資料庫進行互動的時候所需要的API 通常是通過PHP擴充套件暴露出來(給終端PH

php連線mysql程式碼

php連線mysql示例   解決方法: /**  * @param  string  $con_db_host  主機地址  * @param  s

php連線mysql的三種方式

1:使用面向過程: // 設定資料庫引數 define('DB_USER','blog'); define('DB_PASSWORD','lmm13637064637'); define('DB_HO

php連線mysql報錯mysql_connect(): Access denied for user 'root'@'localhost' (using password: YES)

mysql_connect(): Access denied for user ‘root’@‘localhost’ (using password: YES) 1、連線密碼輸錯,檢查程式碼 2、wam

遠端連線MYSQL資料庫出現10061錯誤問題

問題: 第一次安裝好mysq,正常啟動沒有問題。但是等電腦關機後,再次打開發現出問題了,顯示“Can not connect to MySQL server on ‘localhost’(10061)”。 出現這個問題很大一部分因為你的MySQL沒有啟動。 解決辦法:

mac系統-PHP連線mysql資料報錯 No such file or directory解決方案

結合網路上提供的解決方案提供在mac下的詳細解決方案 1.找到/private/etc/php.ini檔案,並開啟並檢視檔案 ..... pdo_mysql.default_socket= ..... mysqli.default_socket = ..... 你會看到

PHP連線MySQL相關操作

PHP 5 及以上版本建議使用以下方式連線 MySQL : MySQLi  PDO (PHP Data Objects) 我個人更偏好使用MySQLi,所以以MySQLi為例連線操作MySQL 而MySQLi又分為面向物件和麵向過程兩種方法,推薦使用面向物件。 下

PHP連線MySQL的增刪改查

  <?php header("content-type:text/html;charset=utf-8"); //新增連線資料庫表 //連線資料庫 $link=mysql_connect('localhost','root','root');

啟動mysql出現1067錯誤

成功安裝好mysql後出現:“發生系統錯誤 1067”最後的解決辦法是重安裝,記得在安裝目錄下下my.ini檔案,其內容如下 [client]default-character-set=gb2312 [mysqld]basedir=d:/mysqldatadir=d:/my

PHP連線mysql資料庫之根據配置檔案選擇mysqli還是pdo方式

配置檔案config.php <?php return array( 'DB' => array( 'default_extension' => 'mysqli', ),

CentOS下httpd下php 連線mysql 本機可以,127.0.0.1不能訪問

你看到的這個文章來自於http://www.cnblogs.com/ayanmw php程式碼很簡單: $server="127.0.0.1"; println("Begin"); $link = mysql_connect($server,"mysql","mysql"); if (!$l

[WAMP網站開發] PHP連線MySQL資料庫基礎知識

這篇文章主要是最近教學生使用WAMP(Windows+Apache+MySQL+PHP)開發網站,HTML佈局首頁,PHP連線資料庫以及XAMPP操作資料庫的基礎文章,更是一篇教學文章。文章比較基礎,希望對能給PHP網站開發的學生做個入門介紹。一. HTML簡單佈局首頁首先是