设为首页收藏本站
查看: 111|回复: 0

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

[复制链接]

论坛元老

Rank: 6Rank: 6

积分
34270
主题
17032
UID
1347
M币
67
贡献
17171

  • 发表于 2018-7-14 20:23:00 | 显示全部楼层 |阅读模式
    PHP连接MySQL主要是使用Mysql提供的 libmysqlclient 的客户端库,同时也延伸出来 mysql 和 mysqli 两套PHP的扩展,相对来说 mysqli 比 mysql 更好,更稳定。

    目前两个客户端扩展库连接超时可以设置选项来操作,比如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中的读写超时是如何实现的:


















      

      
      代码如下:
    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
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    在我站开通SVIP可同时获得17个站点VIP资源 立即登录 立即注册
    快速回复 返回顶部 返回列表