• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > PHP访问MySQL查询超时处理的方法

PHP访问MySQL查询超时处理的方法

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了查询超时等相关知识,希望本文的分享对您有所帮助

PHP连接MySQL主要是使用Mysql提供的 libmysqlclient 的客户端库,同时也延伸出来 mysql 和 mysqli 两套PHP的扩展,相对来说 mysqli 比 mysql 更好,更稳定。

目前两个客户端扩展库连接超时可以设置选项来操作,比如mysqli:
代码如下:
//创建对象
$mysqli = mysqli_init();
//设置超时选项
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
//连接
$mysqli->real_connect('localhost', 'my_user', 'my_password', 'world');
//如果超时或者其他连接失败打印错误信息
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
//成功输出连接信息
printf ("Connection: %s\n.", $mysqli->host_info);
$mysqli->close();
?>

这个是连接超时,但是有些时候我们需要查询读写超时,比如说我们一个数据库压力很大,或者连接很多,那么数据库查询就很缓慢,但是我希望某些不重要的数据,比如说文章点击数这种如果查询超时了就不显示,至少能够保证主体页面正确显示,但是查遍PHP手册没有发现这个操作选项或者函数。

手册里只有这么四个选项

跟踪 mysqli 的扩展源代码发现它底层调用的是 libmysqlclient 的 mysql_options:

并且在mysqli的PHP扩展中就只导出了几个变量:

大概看了一下 libmysqlclient 的代码,发现其实它自带是有读写超时设置的:

因为它自己定义了很多操作选项,只是php扩展里没有:

看看mysql中的读写超时是如何实现的:

代码如下:
//自己定义读写超时常量
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";
?>

基本上到这里就基本能够解决PHP在针对MySQL读写查询操作超时的处理了,希望对你有帮助。
heiyeluren的blog

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-11Mysql字符串处理函数详细介绍、总结
  • 2018-12-05Sql Server 字符串聚合函数
  • 2018-12-05SQLServer XML查询快速入门(18句话)
  • 2018-12-05mysql中is null语句的用法分享
  • 2018-12-05My Sql 1067错误兼编码问题解决
  • 2018-12-05SQL Server 任务监控脚本
  • 2018-12-05sqlserver 2000 远程连接 服务器的解决方案
  • 2018-12-05Mysql命令行登录常用操作系统概述
  • 2017-05-11MYSQL建立外键失败几种情况记录Can't create table不能创建表
  • 2018-12-05Oracle 11g用户修改密码及加锁解锁方法教程

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 在Docker中使用MySQL的教程
    • Mysql一次死锁排查过程的全纪录分享
    • 关于mysql Call 存储过程
    • MySQL优化之连接优化示例代码
    • NodeJS中MySql的增删改查基础写法的实现
    • sql语言中delete删除命令语句详解
    • mysql5.7.18在Centos7.3下如何安装并修改初始密码的方法详解
    • SQL Server 2008R2编写脚本时智能提示功能丢失的处理方法
    • MySQL 分组后取时间最新记录
    • SQL SERVER 日期格式转换详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有