• 技术文章 >php教程 >php手册

    PHP中使用sleep造成mysql读取失败的案例和解决方法,sleepmysql

    2016-06-13 09:26:35原创540

    PHP中使用sleep造成mysql读取失败的案例和解决方法,sleepmysql


    近日,由于项目需求
    需要用到sleep函数定时从数据库取一堆数据出来去执行某些操作。
    sleep等待的时间至少有一个小时以上
    此前做过测试
    用sleep函数去完成数小时后执行的操作是可行的

    可邪门的问题出来了
    程序用sleep后发现不能从数据库取到相应的信息
    把sleep去掉
    结果正常

    郁闷中。。。
    难道sleep影响读库操作!!!
    于是为了方便测试
    直接来个sleep(10) 十秒后执行
    结果能从数据库读取信息

    可为什么sleep()一个小时后不能读取信息呢?
    为了测试方便我直接在sleep语句前读库一次,sleep后再读一次库
    如:

    复制代码 代码如下:


    <?php
    require_once('include.php');
    // 读取数据库信息
    $data = $db->getList();
    print_r($data);

    // 定时一个小时以后
    sleep(3600);

    // 再读取一次信息
    $data = $db->getList();
    print_r($data);

    ?>


    结果发现
    第一次读库成功
    第二次读库为空

    于是再把sleep改成十秒钟后再测试一次

    复制代码 代码如下:


    <?php
    require_once('include.php');
    // 读取数据库信息
    $data = $db->getList();
    print_r($data);

    // 定时十秒以后
    sleep(10);

    // 再读取一次信息
    $data = $db->getList();
    print_r($data);

    ?>


    以上结果
    两次读库成功

    为何一个小时读库失败,十秒钟却读库成功呢??
    我用的是单例数据库操作类
    想起一个问题
    会不会是数据库连接超时导致读库失败呢?
    于是赶紧把此处读库操作改成现连

    复制代码 代码如下:


    <?php
    require_once('include.php');
    // 读取数据库信息
    $data = getList();
    print_r($data);

    // 定时一个小时以后
    sleep(3600);

    // 再读取一次信息
    $data = getList();
    print_r($data);

    // 读取数据库信息
    function getList(){
    $pdo = new PDO('mysql:host=localhost;dbname=test','root','root');
    $result = $pdo->query('select * from tables');
    return $result->fetchAll(PDO::FETCH_ASSOC);
    }
    ?>


    测试成功!!
    原来sleep会导致单例类超时问题从而出现执行时间过长以后数据库连接可能断开问题,也就不能读到数据库信息!


    php读取网页后将源代码存入MYSQL失败?

    应该是有些特殊字符没处理,你用addslashes()转换一下。
    如果实在不行,就用base64_encode()加密一下再存。
    用的时候取出来用base64_decode()解密就行了。
     

    对于php读取mysql的问题

    sql语句这样写select name for 表名 where...
    然后读取第0个

    或者你可以用函数
    mysql_fetch_array

    例子 2. mysql_fetch_array 使用 MYSQL_NUM

    mysql_connect("localhost", "mysql_user", "mysql_password") or
    die("Could not connect: " . mysql_error());
    mysql_select_db("mydb");

    $result = mysql_query("SELECT id, name FROM mytable");

    while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    printf ("ID: %s Name: %s", $row[0], $row[1]);
    }

    mysql_free_result($result);
    ?>

    例子 3. mysql_fetch_array 使用 MYSQL_ASSOC

    mysql_connect("localhost", "mysql_user", "mysql_password") or
    die("Could not connect: " . mysql_error());
    mysql_select_db("mydb");

    $result = mysql_query("SELECT id, name FROM mytable");

    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    printf ("ID: %s Name: %s", $row["id"], $row["name"]);
    }

    mysql_free_result($result);
    ?>

    例子 4. mysql_fetch_array 使用 MYSQL_BOTH

    mysql_connect("localhost", "mysql_user", "mysql_password") or
    die("Could not connect: " . mysql_error());
    mysql_select_db("mydb");

    $result = mysql_query("SELECT id, name FROM mytable");

    while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
    printf ("ID: %s Name: %s",......余下全文>>
     

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP sleep mysql mysql
    上一篇:Yii-数据模型- rules类验证器方法详解,yii-rules 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • PHP代码:Http断点续传的实现例子• PHP5中Cookie与 Session使用详解• php实现文件下载更能介绍• php写的简易聊天室代码• 整理:Apache+MySql+PHP的快速安装
    1/1

    PHP中文网