无论数据库中是否存在,mysql_query总返回0

waterhill 2010-11-11 09:56:19
代码如下:
MYSQL *pData = mysql_init((MYSQL*) 0);
MYSQL_ROW row;
MYSQL_RES *result;
void queryMysql();

void test()
{
pData=mysql_real_connect(pData,"localhost", "root","123456","testData",0,0,0);
if(!pData)
{
::MessageBox(NULL,(LPCTSTR)"Failed",(LPCTSTR)"link mysql",0);
return;
}
else
{
mysql_query(pData,"set names gbk");
}

while(1) //test
{
queryMysql();
}

mysql_close( pData);
}

// 子函数
void queryMysql()
{
int flag =0;
if(pData)
{

flag = mysql_query(pData,"select id,price from product where productName='产品1';");

result = mysql_use_result(pData);
if(result)
{
while((row = mysql_fetch_row( result))!=0) // {
file<<row[0]<<" ,"<<row[1]<<"\t<<"\n";
}
}
mysql_free_result( result ) ;
}

}

问题:
1)无论数据库里是否含有所查询内容,flag均返回0,即查询成功,不应该啊。。。
2)虽然flag=0,若数据库确无此产品,则row=0;反之,row有值,且输入到file的结果与数据库一致
3)当flag = mysql_query(pData,"select id,price from duct where productName='产品1';");即无duct表时,返回1,即错误.

不知道为什么会出现以上两个问题,望高手指点,谢谢~


...全文
376 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iihero_ 2010-11-15
  • 打赏
  • 举报
回复
API返回值,0表示成功,>0表示有警告之类,<0,则表示严重错误,通常是这样子。
写过API的实现,大都遵循此原则。
hawk198 2010-11-13
  • 打赏
  • 举报
回复
只要SQL语句能正确执行,那么就返回0
返回0不代表一定有结果集,rowcount可以是0
但是如果没有数据库或者没有表,是会返回<0的值的
zuoxingyu 2010-11-12
  • 打赏
  • 举报
回复
select * from tb where 1=0;
这样不能返回记录集

select count(*) from tb where 1=0;
这样会返回一个记录集。
也就是说,聚合函数总是会返回一个记录集。
ACMAIN_CHM 2010-11-11
  • 打赏
  • 举报
回复
[Quote]问下,若是不是执行查询,而是执行更新语句,即"update product...",语句正确,但无查询结果,但mysql_query返回仍然是0,此时,那该如何判断是否更新成功?[/Quote]
mysql_affected_rows()

char *stmt = "UPDATE products SET cost=cost*1.25 WHERE group=10";
mysql_query(&mysql,stmt);
printf("%ld products updated",
(long) mysql_affected_rows(&mysql));

waterhill 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acmain_chm 的回复:]
1)无论数据库里是否含有所查询内容,flag均返回0,即查询成功,不应该啊。。。
int mysql_query(MYSQL *mysql, const char *stmt_str)
这个函数返回0代码SQL语句执行没有问题。
显然你的SQL语句没有问题。难道你认为你的SQL语句本身有错误?


2)虽然flag=0,若数据库确无此产品,则row=0;反之,row有值,且输入到fi……
[/Quote]
惭愧惭愧。。。,明白了,在mysql文档上看到“Zero if the statement was successful. Non-zero if an error occurred. ”,还以为是查询结果昵~

问下,若是不是执行查询,而是执行更新语句,即"update product...",语句正确,但无查询结果,但mysql_query返回仍然是0,此时,那该如何判断是否更新成功?
ACMAIN_CHM 2010-11-11
  • 打赏
  • 举报
回复
估计楼主是没搞清楚SQL语句的正确执行与否。

select * from table1 where 1>2;

这个语句不会有符合条件的记录,会返回空集。但这个SQL语句本身是正确执行并返回一个空集。 所以mysql_query返回0 ,即执行正常。
ACMAIN_CHM 2010-11-11
  • 打赏
  • 举报
回复
1)无论数据库里是否含有所查询内容,flag均返回0,即查询成功,不应该啊。。。
int mysql_query(MYSQL *mysql, const char *stmt_str)
这个函数返回0代码SQL语句执行没有问题。
显然你的SQL语句没有问题。难道你认为你的SQL语句本身有错误?


2)虽然flag=0,若数据库确无此产品,则row=0;反之,row有值,且输入到file的结果与数据库一致
对话,你的SQL语句正确执行。 所以flag=0
返回结果集,如 无此产品 则ROW自然应该是0,


3)当flag = mysql_query(pData,"select id,price from duct where productName='产品1';");即无duct表时,返回1,即错误.
由于表不存在,会导致SQL语句执行错误。

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧