Comment définir le délai d'attente pour la requête mysql pour lire les données en PHP : 1. Utilisez mysqlnd pour définir le délai d'attente pour la requête mysql. Le code est [mysqlnd.net_read_timeout =3] ; délai d'attente pour la lecture.
Comment définir le délai d'attente pour la requête MySQL pour lire les données en php :
Le premier paramètre La méthode pour le délai d'expiration des requêtes MySQL consiste à utiliser mysqlnd.
Une fois que php a activé l'extension mysqlnd, définissez simplement mysqlnd.net_read_timeout
dans le fichier php.ini.
L'unité de valeur du paramètre est la seconde. Par exemple :
mysqlnd.net_read_timeout = 3
signifie que le délai d'attente pour chaque requête mysql est de 3 secondes. Si le délai expire, une erreur sera signalée.
Par exemple, le code suivant :
<?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"; ?>
signalera une erreur :
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
En raison d'une erreur PHP Fatal, le code après fetch() ne sera pas exécuté.
Par conséquent, le code doit juger la valeur de retour de la requête. Le code modifié est le suivant :
<?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"; ?>
Remarque : le niveau de l'élément de réglage mysqlnd.net_read_timeout
est PHP_INI_SYSTEM
. Par conséquent, le timeout de la requête mysql ne peut pas être modifié dans le code php.
Une autre façon consiste à utiliser mysqli.
Si mysqlnd n'est pas activé en PHP, vous pouvez utiliser mysqli pour limiter le délai de lecture.
L'exemple de code est le suivant :
<?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"; ?>
Remarque :
1. L'unité de réglage du délai d'attente est en secondes et la configuration minimale est de 1 seconde
2. Mais la lecture sous-jacente de mysql Il sera réessayé deux fois, donc le temps réel sera de 3 secondes
Deux tentatives + lui-même une fois = 3 fois le délai d'attente.
Cela signifie que le délai d'attente minimum est de 3 secondes, ce qui ne sera pas inférieur à cette valeur. Il est acceptable pour la plupart des applications, mais il doit être optimisé pour un petit nombre d'applications.
Recommandations d'apprentissage associées : Programmation PHP de l'entrée à la maîtrise
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!