【问题标题】:MySQL query doesn't work anymore, probably wrong syntaxMySQL 查询不再起作用,可能是语法错误
【发布时间】:2019-10-17 19:10:40
【问题描述】:

我的 MySQL 语法有问题我的意思是我正在使用的查询在重构函数之前工作正常,程序正在成功编译......只是一个查询不起作用。

我尝试过使用引号和撇号,但它仍然不起作用。 这是我的查询:

string add_query = "INSERT INTO `table`(
    `col1`, `col2`, `col3`, `col4`, `col5`, `col6`, `col7`, `col8`, `col9`,
    `col10`, `col11`, `col12`, `col13`, `col14`, `col15`, `col16`, `col17`, 
    `col18`, `col19`, `col20`, `col21`, `col22`) 
    VALUES (
    NULL, '" + var1 + "', '" + var2 + "', '" + var3 + "', '" + var4 + "', '" + 
    var5 + "', '" + var6 + "', '" + var7 + "', 0, NULL, NULL, '" + var8 + "', '" +
    var9 + "', '" + var10 + "', '" + var11 + "', '" + var12 + "', '" + var13 + 
    "', '" + var14 + "', '" + var15 + "', '" + var16 + "','" + var17 + "', '" +
    var18 + "');";

我遇到了这个错误:

Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1

我不知道如何解决它。

欢迎所有帮助或任何想法。 抱歉英语不好,这是我的第二语言。

//编辑 这是我的 cout,它在 MySQL Workbench 中完美运行,但无法通过我的程序运行:

INSERT INTO `table`(`col1`, `col2`, `col3`, `col4`, `col5`, 
                    `col6`, `col7`, `col8`,  `col9`, `col10`, 
                    `col11`, `col12`, `col13`, `col14`, `col15`, 
                    `col16`, `col17`, `col18`, `col19`, `col20`,  
                    `col21`, `col22`) 
VALUES (NULL, 'var1', 'var2', 'var3', 'var4', 'var5', '', 
       'var6', 0, NULL, NULL,  'var7', 'var8', 'var9', ' ', 
       'var10', 'var11',    'var12', 'var13', 'var14', 'var15', 'var16');

【问题讨论】:

  • 您可能没有保护 SQL 注入。您需要转义字符串值或使用准备好的语句(如果它们在 C++ 中可用)
  • 查看add_query 变量(使用您的调试器或简单地使用cout << add_query;)。某处可能有额外的报价。
  • 为什么用c++mysqli(即php)标记你的问题? mysqli 真的与您的问题相关吗?
  • 您能打印出add_query 以便我们更轻松地准确查看其中包含的内容吗?
  • 所以列并没有真正枚举?您只是针对问题更改了它们?

标签: c++ mysql syntax-error


【解决方案1】:

初始字符串的构造存在多个问题,我不确定问题中包含的代码是否与您的程序中的完全相同。

这个程序:

#include <iostream>

int main()
{
    std::string var1 = "var1",
            var2 = "var2",
            var3 = "var3",
            var4 = "var4",
            var5 = "var5",
            var6 = "var6",
            var7 = "var7",
            var8 = "var8",
            var9 = "var9",
            var10 = "var10",
            var11 = "var11",
            var12 = "var12",
            var13 = "var13",
            var14 = "var14",
            var15 = "var15",
            var16 = "var16",
            var17 = "var17",
            var18 = "var18";
    std::string add_query = "INSERT INTO `table`(\
    `row1`, `row2`, `row3`, `row4`, `row5`, `row6`, `row7`, `row8`, `row9`,\
    `row10`, `row11`, `row12`, `row13`, `row14`, `row15`, `row16`, `row17`,\
    `row18`, `row19`, `row20`, `row21`, `row22`)\
    VALUES ( NULL, '" + var1 + "', '" + var2 + "', '" + var3 + "', '" + var4 + "', '" +
    var5 + "', '" + var6 + "', '" + var7 + "', 0, NULL, NULL, '" + var8 + "', '" +
    var9 + "', '" + var10 + "', '" + var11 + "', '" + var12 + "', '" + var13 +
    "', '" + var14 + "', '" + var15 + "', '" + var16 + "','" + var17 + "', '" +
    var18 + "');";

    std::cout << add_query << '\n';
    return 0;
}

产生这个输出:

INSERT INTO `table`(    `row1`, `row2`, `row3`, `row4`, `row5`, `row6`, `row7`, `row8`, `row9`,    `row10`, `row11`, `row12`, `row13`, `row14`, `row15`, `row16`, `row17`,    `row18`, `row19`, `row20`, `row21`, `row22`)    VALUES ( NULL, 'var1', 'var2', 'var3', 'var4', 'var5', 'var6', 'var7', 0, NULL, NULL, 'var8', 'var9', 'var10', 'var11', 'var12', 'var13', 'var14', 'var15', 'var16','var17', 'var18');

这似乎是格式良好的 SQL,尽管某些 API 不需要最后的分号。

【讨论】:

  • 我认为空变量会导致该错误,然后类似于 [..] 'var1', '', 'var3'[...]。它在 MySQL Workbench 中完美运行,但没有通过我的程序...我的 cout 看起来和你的很相似。
  • 您是否尝试从 SQL 字符串中删除终止分号?
  • 是的,我已经尝试过这样做,但没有任何改变......仍然是同样的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2015-09-01
  • 2012-02-21
相关资源
最近更新 更多