MySQL 中mysql_query()来判断数据库是否连接中断(二)
2017-04-23 01:09
435 查看
前言
上一节讲到,使用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返回值 |
---|---|---|
2 | 0 | 0 |
3 | 1 | 1146(表不存在) |
5 | 1 | 2013 |
9 | 0 | 0 |
分析
通过mysql_errno的确可以正确得到错误的代码修正:
将(一)中的流程修改如下:
#include <errmsg.h> ··· ··· flag<-mysql_query() if flag=1 flag<-mysql_errno() if(flag=CR_SERVER_LOST) Reconnect() mysql_query() ··· ···
相关文章推荐
- MySQL 中mysql_query()来判断数据库是否连接中断
- mysql 数据库中的三种判断是否包含总结
- 判断mysql指定数据库指定表是否存在的SQL语句
- 通过建立Socket连接来快速判断数据库连接是否正确
- mysql判断指定数据库是否存在?
- C#使用Socket快速判断数据库连接是否正常的方法
- PHP连接数据库步骤以及判断是否有值!
- mysql测试数据库是否连接成功
- PHP 判断mysql_query是否执行成功
- 判断数据库是否连接上
- 判断MySQL连接是否有效
- PHP:判断PHP是否成功连接数据库
- php判断mysql_query是否成功执行
- mysql5.7基础 create database if not exists... 判断数据库是否存在 若不存在则创建
- ThinkPHP3.2.3---mysql+ajax实现长连接,实时监测数据库数据是否更新
- 判断MySql某个数据库是否存在
- 判断数据库时时连接程序,判断是否断开,断开则自动连接
- C++ 连接mysql 数据库,以及query语句
- mysql 数据库中的三种判断是否包含总结
- 判断MySql某个数据库是否存在