【发布时间】:2010-04-25 19:53:18
【问题描述】:
在网上大量搜索之后,我仍然没有找到任何解决这个问题的方法。
我正在编写一个小型 C++ 应用程序,它连接到在线数据库并在列表框中输出数据。
我需要使用编辑框启用搜索功能,但使用变量时无法使查询工作。
我的代码是:
res = mysql_perform_query (conn, "select distinct artist from Artists");
//res = mysql_perform_query (conn, "select album from Artists where artist = ' ' ");
while((row = mysql_fetch_row(res)) != NULL){
CString str;
UpdateData();
str = ("%s\n", row[0]);
UpdateData(FALSE);
m_list_control.AddString(str);
}
第一行“res =”运行良好,但我需要第二行运行。我为编辑框设置了一个成员变量m_search_edit,但是我尝试将它包含在 sql 语句中的任何方式都会导致错误。
例如。
res = mysql_perform_query (conn, "select album from Artists where artist = '"+m_search_edit+" ' ");
导致此错误:
错误 C2664:“mysql_perform_query”:无法将参数 2 从“class CString”转换为“char *” 没有可以执行此转换的用户定义转换运算符,或者无法调用该运算符”
当我将 m_search_edit 转换为 char* 时,它会给我一个“无法添加 2 个指针”错误。
有没有办法解决这个问题?
【问题讨论】:
-
你不是在
str = ...;行中缺少sprintf吗? -
顺便说一句,您正在为 SQL 注入进行设置。对于桌面应用程序来说可能不是什么大问题,但您仍然应该正确编码
m_search_edit。 -
不,sprintf 没有工作,当我删除它时,程序工作了。对不起,我应该更清楚这是一个 MFC APP。
-
关于SQL注入问题,这只是一个大学的小项目,所以我现在不太担心这方面,只是想让程序先运行。不过感谢您的帮助,如果没有它,我不会知道 SQL 注入是什么。