站長資訊網
        最全最豐富的資訊網站

        php中如何設置mysql查詢讀取數據的超時時間

        php中設置mysql查詢讀取數據的超時時間方法:1、使用mysqlnd設置mysql查詢超時時間,代碼為【mysqlnd.net_read_timeout =3】;2、使用mysqli進行限制read的超時時間。

        php中如何設置mysql查詢讀取數據的超時時間

        php中設置mysql查詢讀取數據的超時時間方法:

        第一種設置mysql查詢超時時間的方法是使用mysqlnd。

        php啟用mysqlnd擴展后,只要在php.ini文件中設置mysqlnd.net_read_timeout即可。

        參數值的單位為秒。如:

        mysqlnd.net_read_timeout = 3

        表示每次mysql查詢超時時間為3秒。如果超時,則會報錯。

        如下面的代碼:

        <?php $dsn = 'mysql:dbname=demo;host=127.0.0.1;port=3306'; $user = 'demo'; $password = 'demo'; $dbh = new PDO($dsn, $user, $password); $dbh->query("set names utf8"); $sql = "select sleep(5)"; $sth = $dbh->query($sql); $row = $sth->fetch(); echo "over"; ?>

        則會報錯誤:

        PHP Warning: PDO::query(): MySQL server has gone away PHP Warning: PDO::query(): Error reading result set's header PHP Fatal error: Call to a member function fetch() on a non-object

        由于出現了PHP Fatal error錯誤,導致fetch()之后的代碼將無法執行。

        因此代碼需要對query的返回值做下判斷,修改后的代碼如下:

        <?php $dsn = 'mysql:dbname=demo;host=127.0.0.1;port=3306'; $user = 'demo'; $password = 'demo'; $dbh = new PDO($dsn, $user, $password); $dbh->query("set names utf8"); $sql = "select sleep(5)"; $sth = $dbh->query($sql); if(is_object($sth)){     $row = $sth->fetch(); } echo "over"; ?>

        注意:設置項 mysqlnd.net_read_timeout 的級別是PHP_INI_SYSTEM。所以在php代碼中不能修改mysql查詢的超時時間。

        另一種方式是使用mysqli。

        如果php沒有啟用mysqlnd,那么可以使用mysqli進行限制read的超時時間。

        示例代碼如下:

        <?php //自己定義讀寫超時常量 if (!defined('MYSQL_OPT_READ_TIMEOUT')) {         define('MYSQL_OPT_READ_TIMEOUT',  11); } if (!defined('MYSQL_OPT_WRITE_TIMEOUT')) {         define('MYSQL_OPT_WRITE_TIMEOUT', 12); } //設置超時 $mysqli = mysqli_init(); $mysqli->options(MYSQL_OPT_READ_TIMEOUT, 3); $mysqli->options(MYSQL_OPT_WRITE_TIMEOUT, 1); //連接數據庫 $mysqli->real_connect("localhost", "root", "root", "test"); if (mysqli_connect_errno()) {    printf("Connect failed: %s/n", mysqli_connect_error());    exit(); } //執行查詢 sleep 1秒不超時 printf("Host information: %s/n", $mysqli->host_info); if (!($res=$mysqli->query('select sleep(1)'))) {     echo "query1 error: ". $mysqli->error ."/n"; } else {     echo "Query1: query success/n"; } //執行查詢 sleep 9秒會超時 if (!($res=$mysqli->query('select sleep(9)'))) {     echo "query2 error: ". $mysqli->error ."/n"; } else {     echo "Query2: query success/n"; } $mysqli->close(); echo "close mysql connection/n"; ?>

        注意:

        1. 超時設置單位為秒,最少配置1秒

        2. 但mysql底層的read會重試兩次,所以實際會是 3 秒

        重試兩次 + 自身一次 = 3倍超時時間。

        那么就是說最少超時時間是3秒,不會低于這個值,對于大部分應用來說可以接受,但是對于小部分應用需要優化。

        相關學習推薦:PHP編程從入門到精通

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 久久亚洲国产午夜精品理论片| 国产精品第六页| 久久精品一区二区国产| 午夜福利麻豆国产精品| 亚洲精品免费观看| 国产精品视频一区二区三区四| 免费精品久久久久久中文字幕| 日韩精品国产自在久久现线拍| 国产精品香港三级国产AV| 亚洲A∨精品一区二区三区| 国产99视频精品专区| 99免费精品视频| 国产精品igao视频网| 亚洲国产成人精品无码区在线观看 | 精品久久一区二区| 精品国产三级a在线观看| 夜夜高潮夜夜爽国产伦精品| 久草欧美精品在线观看| 国产成人毛片亚洲精品| 亚洲国产精品线在线观看| 国产亚洲精品xxx| 99久久精品国产高清一区二区| 精品一区二区三区东京热| 无码精品人妻一区二区三区免费看| 亚洲国产成人精品无码久久久久久综合| 国产精品午夜国产小视频| 四虎永久在线精品884aa下载| 国产精品电影网| 国产精品亚洲欧美一区麻豆| 2020亚洲男人天堂精品| 99re6在线视频精品免费| 99精品视频在线观看| 久热这里只精品99re8久| 91精品国产91久久| 国产精品亚洲二区在线观看| 国产91在线精品| 国产欧美精品一区二区三区四区 | 思思99热在线观看精品| 精品一区二区三区免费| 精品国产污污免费网站| 四虎国产精品永久地址99新强|