问题描述
- mysql_real_query返回值是1,一直删除失败
-
str.Format(_T("%s"),row[0]); row=mysql_fetch_row(result); while(ln[i]!=str) { CString strSQL; MYSQL_RES *result; strSQL.Format("delete from mytable where name='%s'",str); if(mysql_real_query(&mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0) { AfxMessageBox("删除失败"); } str.Format(_T("%s"),row[0]); row=mysql_fetch_row(result); }
解决方案
要看具体的错误信息,删除一般发生的错误有
没有找到数据、数据存在关联,先要删除级联的数据才能删除它
解决方案二:
SQL语句没有错误,在MYSQL中执行命令可以执行
解决方案三:
参考Mysql : mysql_real_query 返回1
要是以后大家有人遇到这个问题又无解的话,参考本贴的错误情况,我终于发现问题在哪了:
如果前一次调用了 mysql_use_result (使用结果集的都算),而返回时没有调用 mysql_free_result( ); 那么在下一次调用mysql_real_query的时候就会出错,总而言之,使用了 MYSQL_RES *就得释放,否则就会出错,错误代码此时是1(其他错误返回值也有为1的时候,另当别论)
在上面你贴出来的你的代码
第二行row=mysql_fetch_row(result);,这里有了result,但是在第六行MYSQL_RES *result;又定义了result。
第一行str.Format(_T("%s"),row[0]);,倒数第二行也是str.Format(_T("%s"),row[0]);
第二行有row=mysql_fetch_row(result);,最后一行是row=mysql_fetch_row(result);
你有没有觉得有点乱,理一下你的思路和逻辑,存储不同的数据定义不同的变量。看看能不能解决问题。
解决方案四:
查看一下具体错误,是不是你调用sql语句的时候,参数有问题,导致最后的sql语句并不是你想象的结果
解决方案五:
改成这个strSQL.Format("delete from mytable where name='%s'",str);
时间: 2024-10-03 17:38:57