zoukankan      html  css  js  c++  java
  • MYSQL长连接的一个小问题

    关于MYSQL长连接的代码这里就不做多的解释,大家可以在网上找找。下面就说说我遇到的几个问题

    首先是版本的问题 其他网站上也有相关的解释就是:

    使用mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) 来设置为自动重连。这样当mysql连接丢失的时候,使用mysql_ping能够自动重连数据库。如果是在mysql 5.1.6之前,那么则应在每次执行完real_connect 之后执行mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) ,如果是mysql 5.1.6+,则在connect之前执行一次就够了。

    这样写的话前提是我们提前知道版本号且mysql版本固定,如果Mysql版本发生变化则有可能我们代码也需要改动,剩下的我就不说了,相信大家也明白。那么就说说我的方案:

    1.用mysql_real_connect连接数据库

    2.用mysql_get_server_version获取到Mysql版本号的整数后,close掉该次连接PS:版本号整数得来如5.1.6  5*10000+1*100+6=50106

    3.在mysql_real_connect之前,加一个条件判断 获取的版本号>=50106,那么就是执行mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) 

    4.在mysql_real_connect成功后,加一个条件判断 获取的版本号<50106,那么就是执行mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) 

    这样就避免了前面说的问题

    另一个问题就是在执行某几条存储过程后在mysql_ping返回值为1

    这个原因是在执行存储过程后 结果集没有释放完,当然如果别人给了多个结果集出了错误,导致我这边程序错误这是不可取的。所以自己写一个循环清除结果集的函数,在执行存储过程,获取值完整后,调用该函数避免存在结果集未mysql_free_result

    希望这个能给大家帮助

  • 相关阅读:
    redis发布订阅
    redis学习笔记(面试题)
    redis安全 (error) NOAUTH Authentication required
    HDU3001 Travelling —— 状压DP(三进制)
    POJ3616 Milking Time —— DP
    POJ3186 Treats for the Cows —— DP
    HDU1074 Doing Homework —— 状压DP
    POJ1661 Help Jimmy —— DP
    HDU1260 Tickets —— DP
    HDU1176 免费馅饼 —— DP
  • 原文地址:https://www.cnblogs.com/spqqps/p/5436397.html
Copyright © 2011-2022 走看看