关于mysql_query()的返回值问题

最近在做一个网络通信的小项目,其中用到了一些基本的数据库Mysql的知识。在项目中有一个需求是:判断用户注册时的用户名是否已被注册,针对这个需求,需要用到mysql_query()来执行select语句查询数据库中是否存在当前用户输入的用户名信息
我的思路是这样的:

  • 通过mysql_query()来执行select语句,在数据库中进行查找
  • 根据函数返回值来判断数据库中是否有查询的用户名信息

在这里插入图片描述

  • 根据mysql_query()的描述,我当时想的是:返回值为0代表查询到了用户名信息,返回值为非0代表出错,没有查询到用户名信息

可是在实际跑代码的过程中,我发现:

  • 不管在我实际的数据库中有没有要查询的用户名信息, mysql_query()的返回值都为0

后来我才弄明白,不管数据库中有没有要查询的用户名信息,只要select语句执行成功,mysql_query()的返回值就都为0

所以,要想知道数据库中是否存在查询的用户名信息,还需要借助两个函数:mysql_store_result()和 mysql_fetch_row()
在这里插入图片描述
在这里插入图片描述

  • mysql_store_result()用来保存mysql_query()执行相应语句的结果,只要mysql_query()执行不出错,就不会返回空指针
  • mysql_fetch_row()用来获得mysql_store_result()中保存结果的行数,若没有要检索的行,也就是mysql_query()执行相应语句的结果为空,mysql_fetch_row()将返回NULL

所以,我们可以通过判断mysql_fetch_row()的返回值来判定数据库中是否存在检索的用户名信息

在我项目中的代码如下:

				#include <mysql.h>
				MYSQL *mysql;
        		MYSQL_RES *res_ptr;
        		MYSQL_ROW sqlrow;
  				char query[100];
  				std::string strclientmsg;
                sprintf(query, "select password from UserInfo where username = '%s'", name);
                int ret = pReactor->sqlQuery(query);
                res_ptr = mysql_store_result(pReactor->mysql); 
                sqlrow = mysql_fetch_row(pReactor->res_ptr);
                if(sqlrow)
                {
                    strclientmsg += "The name has been registered";
                }
                mysql_free_result(pReactor->res_ptr);

每次调用完mysql_store_result()后,记得调用mysql_free_result()释放内存

  • 15
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值