我正在使用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语句中的文字前后加上引号。
如果NAMEPASSWORD, and/or TEMP`不够大,则内存将被破坏。
您必须在NAME或PASSWORD中转义某些特殊字符(特别是引号)。


C是与MySQL一起使用的一种非常低级的语言。在大多数语言中,整个功能(带有修复程序)将花费5-10行代码。

关于mysql - 关于MariaDB/MySQL C连接器API的C中的字符串I/O?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43262809/

10-11 22:55
查看更多