我正在使用MariaDB C连接器API在C中创建函数,以允许用户输入新的用户名和密码,并将其存储在MariaDB / MySQL数据库中。我使用strcpy_s()和strcat_s()在缓冲区中将几个字符串连接在一起,以便产生MariaDB / MySQL查询以将信息放入数据库中。这会导致“字段列表中的未知列”错误。在使用“ foo”和“ bar”作为预设字符串实现函数之前,我曾在这里问过类似的问题,我收到的答案(有效)是将“ foo”和“ bar”更改为“'foo” '”和“'bar'”。这工作了。有没有一种方法可以在运行时以“'foo'”形式与“ foo”形式从用户处获取字符串?以下是该功能的相关代码。
void NEW_PLAYER(MYSQL *con)
{
char NAME[16];
char PASSWORD[16];
char ch = NULL;
unsigned int i = 0;
printf("New Username: ");
while (ch != '\n') // terminates when the user presses enter
{
ch = getchar();
NAME[i] = ch;
i++;
}
NAME[i] = '\0';
i = 0;
ch = NULL;
printf("New Password: ");
while (ch != '\n') // terminates if user hits enter
{
ch = getchar();
PASSWORD[i] = ch;
i++;
}
PASSWORD[i] = '\0';
printf("%s", NAME);
printf("%s", PASSWORD);
char TEMP[256];
char str1[] = "INSERT INTO PLAYERS VALUES(";
strcpy_s(TEMP, str1); strcat_s(TEMP, NAME);
strcat_s(TEMP, ", ");
strcat_s(TEMP, PASSWORD);
strcat_s(TEMP, " ,0, 0, 0, 1)");
if (mysql_query(con, TEMP)) {
fprintf(stderr, "%s\n", mysql_error(con));
exit(-1);
}
}
最佳答案
您需要在INSERT
语句中的文字前后加上引号。
如果NAME
,PASSWORD, and/or
TEMP`不够大,则内存将被破坏。
您必须在NAME或PASSWORD中转义某些特殊字符(特别是引号)。C
是与MySQL一起使用的一种非常低级的语言。在大多数语言中,整个功能(带有修复程序)将花费5-10行代码。
关于mysql - 关于MariaDB/MySQL C连接器API的C中的字符串I/O?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43262809/