关于mysql_query()的返回值问题

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

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

关于mysql_query()的返回值问题_第1张图片

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

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

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

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

所以,要想知道数据库中是否存在查询的用户名信息,还需要借助两个函数:mysql_store_result()和 mysql_fetch_row()
关于mysql_query()的返回值问题_第2张图片
关于mysql_query()的返回值问题_第3张图片

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

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

在我项目中的代码如下:

				#include 
				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()释放内存

你可能感兴趣的:(问题解决,Mysql,mysql_qurey())