无法解决这个错误

时间:2010-07-17 02:49:58

标签: c++ mysql

你们可以在这个查询中看到任何明显的错误吗?我得到的错误是:`字段列表中的未知列003ADF50。 003ADF50 wtf?

query << "UPDATE `record` SET `record` = " << lastRecord << ", `time` = " << time;

1 个答案:

答案 0 :(得分:4)

这里看起来正在发生的是你注入你的sql中的那些值之一就是003ADF50。 (可能是time值?)

Brendan Long是正确的:您应该使用预准备语句来正确处理SQL中的参数。手动连接字符串会导致引用问题,就像您在此处看到的那样,这可能是您代码中的严重安全问题。您在此处遇到的具体引用问题是您的结果查询字符串中未引用参数。如果你手动将SQL输入mysql客户端,你会说:

UPDATE `record` set `record` = 'foo';

如果你遗漏了'foo'上的引号,你就有了:

UPDATE `record` set `record` = foo;

尝试将记录列设置为foo列的值,而不是文字字符串'foo'。使用C ++生成的SQL也会发生同样的事情。试图通过手动添加引号来解决这个问题并不是一个好主意 - 当字符串参数包含引号字符时会发生什么?最好的办法是使用准备好的陈述。

此外,谷歌“小小的桌子”是关于sql参数注入的着名XKCD漫画,并考虑如果Bobby Tables的名字进入你的程序变量之一会发生什么。