php에서 데이터를 읽기 위해 mysql 쿼리에 대한 시간 제한을 설정하는 방법: 1. mysqlnd를 사용하여 mysql 쿼리에 대한 시간 제한을 설정합니다. 코드는 [mysqlnd.net_read_timeout =3]입니다. 2. mysqli를 사용하여 읽기 시간 제한을 제한합니다.
PHP에서 데이터를 읽기 위해 mysql 쿼리에 대한 시간 제한을 설정하는 방법:
mysql 쿼리에 대한 시간 제한을 설정하는 첫 번째 방법은 mysqlnd를 사용하는 것입니다.
php에서 mysqlnd 확장을 활성화한 후 php.ini 파일에서 mysqlnd.net_read_timeout
을 설정하면 됩니다. 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 //自己定义读写超时常量 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"; ?>
rrreee
는 오류를 보고합니다.rrreee
PHP 치명적인 오류로 인해 fetch() 이후의 코드는 실행되지 않습니다. 그래서 코드는 쿼리의 반환값을 판단해야 합니다. 수정된 코드는 다음과 같습니다.rrreee
참고:mysqlnd.net_read_timeout
설정 항목의 레벨은 PHP_INI_SYSTEM
입니다. >. 따라서 mysql 쿼리의 시간 초과는 PHP 코드에서 수정할 수 없습니다.
또 다른 방법은 mysqli를 사용하는 것입니다.
PHP에서 mysqlnd가 활성화되지 않은 경우 mysqli를 사용하여 읽기 시간 초과를 제한할 수 있습니다.1. 시간 초과 설정 단위는 초이며, 최소 구성은 1초입니다.🎜🎜2. 그러나 mysql의 기본 읽기는 두 번 다시 시도하므로 실제 시간은 3초입니다🎜🎜재시도 2회 + 단독 1회 = 타임아웃 3배. 🎜🎜즉, 최소 시간 제한은 3초이며 이 값보다 낮을 수는 없습니다. 이는 대부분의 애플리케이션에 허용되지만 소수의 애플리케이션에 대해서는 최적화가 필요합니다. 🎜🎜🎜관련 학습 권장 사항: 🎜초보부터 마스터까지 PHP 프로그래밍🎜🎜🎜샘플 코드는 다음과 같습니다. rrreee참고:
위 내용은 PHP에서 데이터를 읽기 위해 mysql 쿼리의 시간 초과를 설정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!