【问题标题】:mysql and c -- use variable in querymysql 和 c -- 在查询中使用变量
【发布时间】:2011-05-09 18:02:35
【问题描述】:

我正在编写一个带有 mysql 数据库连接的 c 程序 而且我在创建我的 mysql 查询时遇到了困难......

我想在我的 mysql 查询中给你一个变量整数,但我似乎无法正确...

我当前的查询看起来像这样......

mysql_query(conn, "INSERT INTO markerherkenning (MARKER_ID, DATETIME) values(1, CURRENT_TIME())");

我的 marker_ID 值应该是一个变量值,所以我可以减少我的代码...

我已使用本指南让我继续前进... (http://zetcode.com/tutorials/mysqlcapitutorial)

感谢您的帮助

【问题讨论】:

  • 你能把它构建到字符串中吗? IE: "INSERT INTO markerherkenning (MARKER_ID, DATETIME) values(" + variable + "CURRENT_TIME())" 忘记了如何在c中准确地做到这一点,但是那种事情
  • @Chris:请不要建议人们对 SQL 注入敞开心扉。
  • @Chris:通过盲目地连接字符串来构建 SQL 语句是灾难的根源。
  • @Wooble:不确定如何在内部将整数值转换为字符串会使您面临注入攻击。
  • @jordi:您使用的是 mysql++ 还是 C? mysql++ 是一个 C++ 库。

标签: c mysql++


【解决方案1】:

类似这样的:


sprintf(request, "INSERT INTO markerherkenning (%d, DATETIME) values(1, CURRENT_TIME())", marker_id);

首先,您使用 sprintf(或 snprintf)将您的请求生成一个字符串,然后将其用于 sql 查询。

【讨论】:

    【解决方案2】:

    如果您需要多次执行此操作,您可能需要使用prepared statement。这需要更多的工作,但它可以为您带来一些安全性和性能。更不用说您不必一直在字符串和其他类型之间进行转换。

    【讨论】:

    • 是的,但现在它是 50 行代码......它会变成 +100......所以我更喜欢改变 :)
    • @Jordi:c'est la logiciel。显然,存在权衡;如果这是一个供您自娱自乐的玩具应用程序,则可能不值得付出额外的努力。但是,如果这是要上线的东西,那么您肯定希望为此付出额外的努力。
    【解决方案3】:

    您必须将 MARKER_ID 转换为字符串,然后将其附加到查询的第一部分,然后再附加其余部分。

    char *query = malloc(80);
    char num[11];
    
    num = atoi(MARKER_ID);    
    
    strcpy(query, "INSERT INTO markerherkenning (");
    strcat(query, num);
    strcat(query, ", DATETIME) values(1, CURRENT_TIME())");
    

    【讨论】:

    • @Bryan Drewery:是的,已修复。谢谢:)
    • 我如何在我的 mysql 查询中实现这个? mysql_query(conn, 查询); ?我的程序崩溃了@ char *num = atoi(var);
    • num = atoi(var) 无法识别 Error 11 error C2106: '=' : left operand must be l-value... :s
    • 我的解决方案...感谢您的帮助 char *state;字符缓冲区[256]; state = "INSERT INTO markerherkenning (MARKER_ID , DATETIME) VALUES('%d',CURRENT_TIME())"; len = sprintf(缓冲区,状态,t); mysql_real_query(conn, 缓冲区, len);这行得通:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2013-05-15
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    相关资源
    最近更新 更多