`
conkeyn
  • 浏览: 1505491 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

mysql_query()防止掉链的数据库查询

    博客分类:
  • PHP
阅读更多
// -------------------------------------------------------------------
// 函数名称:自定义 mysql_query (加入防掉链功能)
// 调用方式:mysql_query_plus($sql_str, $conn_resource, $dbname_str)
// 变量说明:$sql_str        - 需要执行的查询语句 [string]
//           $conn_resource  - 数据库连接资源 [resource]
//           $host=LOCAL_DB_HOST 数据库主机地址,默认为本机配置
//           $user=LOCAL_DB_USER 数据库用户名,默认为本机配置
//           $pwd=LOCAL_DB_PWD 数据库密码,默认为本机配置
//           $dbname_str     - 连接的库名(默认使用已配置的) [string]
// 返回值类型:resource 或 Boolean
// -------------------------------------------------------------------
function mysql_query_plus($sql_str, & $conn_resource, $host=LOCAL_DB_HOST, 
            $user=LOCAL_DB_USER, $pwd=LOCAL_DB_PWD, $dbname_str = LOCAL_DB_NAME)
{
    // 第一次执行查询
    $query_result = mysql_query($sql_str, $conn_resource);

    // 判断执行查询是否正确
    if ($query_result === false)

        // 如果运行出错,则获取mysql的错误号
        $mysql_error_num = mysql_errno($conn_resource);
    else

        // 运行正常,则返回sql执行结果
        return $query_result;

    // 计数器(用来限制循环次数)
    $link_error_times = 0;

    // 如果执行查询出错,则需要进一步处理
    while ($mysql_error_num != 0 && $link_error_times < 10)
    {
        // 计数器 +1
        $link_error_times++;
        echo "link_error_times:$link_error_times \n";

        // 判断连接是否已丢失
        // 主要用来以防“MySQL server has gone away”
        // if ((! mysql_ping($conn_resource))
        //      || in_array(mysql_errno($conn_resource), array(2006, 2013)))
        // 使用新方法:客户端错误号一般大于 2000
        if ((! mysql_ping($conn_resource)) || mysql_errno($conn_resource) > 2000)
        {
            // 重新连接
            @mysql_close($conn_resource);
            $conn_resource = mysql_pconnect($host,
                                            $user,
                                            $pwd);

            // 本地数据库使用UTF8字符集
            mysql_query("SET NAMES 'utf8'", $conn_resource);
            mysql_select_db($dbname_str, $conn_resource);
        }

        // 重新执行查询
        @$query_result = mysql_query($sql_str, $conn_resource);

        // 判断是否查询是否成功
        if (! ($query_result === false))

            // 运行正常,则返回sql执行结果
            return $query_result;
    }

    // 多次尝试未果,返回 false
    return false;
}    // end mysql_query_plus
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics