MySQL 中mysql_query()来判断数据库是否连接中断(二)

前言

上一节讲到,使用mysql_query()的返回值来判断数据库连接是否出错。但是,在实现的过程中发现无论是sql 语句本身有问题,比如 查询一张不存在的表,还是数据库的确shutdown了,mysql_query的返回值都是1.当mysql_query无错执行时,其值都为0.这就有一疑问了,为什么官方文档明明是那么写?可是实际中却?Excuse Me???

再看官方文档:

Return Values

Zero for success. Nonzero if an error occurred.

Errors

CR_COMMANDS_OUT_OF_SYNC

Commands were executed in an improper order.

CR_SERVER_GONE_ERROR

The MySQL server has gone away.

CR_SERVER_LOST

The connection to the server was lost during the query.

CR_UNKNOWN_ERROR

An unknown error occurred.

我们来好好读一下这句话:

Return Values

Zero for success. Nonzero if an error occurred.

其唯一能确定的是:成功返回0,不成功返回非0.但是 其返回值人家也没说就要指定不同的错误呀?!而且实践结果也的确说明,mysql_query在执行出错的情况下,统统返回值1.
那它的错误代码CR_XXX怎么用嘞?

再看文档的reference

在官方的这篇的文档关于Error的几个链接里面,我们发现了两个神奇的函数:
char * mysql_error(MYSQL *mysql);
返回mysql连接最近一次错误字符串.
unsigned int mysql_errno(MYSQL *mysql);
返回mysql连接的最近一次错误码

似乎发现了什么~,好像是在说,我们可以通过mysql_errno来获取错误代码。

实践一波

实践方案:

目的:通过mysql_errno()函数获取否则的错误编码。

步骤:

1. mysql 服务器restart,正常运行.
2. mysql_query()执行正确的sql查询语句,得到mysql_query返回值. 并通过mysql_errno()获取错误代码。
3. mysql_query()执行一条错误的sql语句,得到mysql_query返回值.使用mysql_errno()得到错误代码
4. 断开mysql服务器
5. mysql_query()执行一条正确的sql语句,得到mysql_query返回值以及mysql_errno的返回值
6. 进程sleep(10)
7. 打开mysql 服务器
8. 执行重连逻辑
9. mysql_query()执行一条正确的sql语句,得到mysql_query返回值以及mysql_errno的返回值

实践结果

步骤mysql_query返回值mysql_errno返回值
200
311146(表不存在)
512013
900

分析

通过mysql_errno的确可以正确得到错误的代码

修正:

将(一)中的流程修改如下:
#include <errmsg.h>
···
···
flag<-mysql_query()
if flag=1
        flag<-mysql_errno()
        if(flag=CR_SERVER_LOST)
            Reconnect()
            mysql_query()
···
···
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值