mysql - 使用 visual studio CLR/C 在 mysql 中插入变量

标签 mysql c visual-studio-2010 insert clr

我在 visual studio 2010 中使用 mysql 连接器并从数据库中提取数据。还成功插入数据作为值。但是无法插入带有变量的数据。需要帮助,请。

这个有效。

mysql_query(connect,"INSERT INTO input VALUES(111,'Bangladesh','Khulna','Male','Muhammad Ashikuzzaman KUET','b+')");

但这不起作用。

  str="Muhammad Ashikuzzaman KUET";
  mysql_query(connect,"INSERT INTO input VALUES(111,'Bangladesh','Khulna','Male','@str','b+')");
  or
  mysql_query(connect,"INSERT INTO input VALUES(111,'Bangladesh','Khulna','Male',@str,'b+')");

请提出解决方案。

最佳答案

您必须在调用 mysql_query() 之前创建字符串:

char statement[512], *str = "Muhammad Ashikuzzaman KUET";
snprintf(statement, sizeof statement, "INSERT INTO input VALUES(111,'Bangladesh','Khulna','Male','%s','b+')", str);
mysql_query(connect, statement);

此外,在创建这些查询字符串时要小心。如果您不能确定结果字符串的长度,请不要使用像 sprintf() 这样的函数。不要越过内存段的边界。

编辑

为预防起见,如果字符串通常来自任意来源,您可以另外使用 mysql_real_escape_string():

int insertData(MYSQL *connect, char *str, int str_len) {
    if (str_len < 0) {
        str_len = strlen(str);
    }

    char esc[2 * str_len + 1];
    unsigned long esclen = mysql_real_escape_string(connect, esc, str, str_len);

    char statement[512];
    snprintf(statement, sizeof statement, "INSERT INTO input VALUES(111,'Bangladesh','Khulna','Male','%s','b+')", esc);
    return mysql_query(connect, statement);
}

同样在这里,我假设您的输入字符串足够小以适合 512 个字符的字符串。实际上,它不会起作用。所以根据输入字符串的长度加上一些额外的长度来声明statement 长度变量以适应查询字符串。

关于mysql - 使用 visual studio CLR/C 在 mysql 中插入变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25893917/

相关文章:

php - 在 PDO 选择查询中组合两列/字段

c# - 根据绑定(bind)值更改 ListView 图像

php - 如何使用 zend paginate 和普通的 sql 查询而不是 zend_db_select

c - 将 union 中的结构修改为 union 中的其他值而不进行复制

c#:查找错误:if(false)

c++ - 反汇编简单的Hello World程序

php - 尝试从函数中检索 int 类型并将其与 $_Get 值进行比较(mysql PHP)

c++ - 为什么这行得通? C中的字符指针

c - 是否有像 g_printf_string_upper_bound 这样的可移植函数?

c# - 找不到类型或命名空间名称 'DevExpress' -- 错误