久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      php中如何設(shè)置mysql查詢讀取數(shù)據(jù)的超時時間

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

      php中如何設(shè)置mysql查詢讀取數(shù)據(jù)的超時時間

      php中設(shè)置mysql查詢讀取數(shù)據(jù)的超時時間方法:

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

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

      參數(shù)值的單位為秒。如:

      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

      由于出現(xiàn)了PHP Fatal error錯誤,導(dǎo)致fetch()之后的代碼將無法執(zhí)行。

      因此代碼需要對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"; ?>

      注意:設(shè)置項 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); } //設(shè)置超時 $mysqli = mysqli_init(); $mysqli->options(MYSQL_OPT_READ_TIMEOUT, 3); $mysqli->options(MYSQL_OPT_WRITE_TIMEOUT, 1); //連接數(shù)據(jù)庫 $mysqli->real_connect("localhost", "root", "root", "test"); if (mysqli_connect_errno()) {    printf("Connect failed: %s/n", mysqli_connect_error());    exit(); } //執(zhí)行查詢 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"; } //執(zhí)行查詢 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. 超時設(shè)置單位為秒,最少配置1秒

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

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

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

      相關(guān)學(xué)習(xí)推薦:PHP編程從入門到精通

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號