我的程序从数据库中读取0,即使有1

时间:2018-01-13 00:00:09

标签: c++ mysql

我不明白代码有什么问题,我已经阅读了很多次但我找不到错误

pstmt = con->prepareStatement("SELECT (?) FROM votos WHERE id = (?)");
pstmt->setString(1, eleccion);
pstmt->setInt(2, p->getId());
res = pstmt->executeQuery();
while(res->next())
{
    p->setVoto(res->getInt(1));
}

eleccionid变量分别为Provincial1时,getInt(1)函数应返回1,但返回0.

命令(在mysql命令行中):

SELECT Provincial from Votos WHERE id=1

返回一个包含一行和一列值为1

的表

附注:

检查拼写

getId()函数正常工作

编译器不会给出任何错误

1 个答案:

答案 0 :(得分:2)

您不能在准备好的查询中使用占位符作为列名。它返回字符串eleccion的值,而不是将其用作表中列的名称。您需要进行字符串连接以替换列名。

std::string sql = std::string("SELECT `") + eleccion + "` FROM votos WHERE id = ?";
pstmt = con->prepareStatement(sql.c_str());
pstmt->setInt(1, p->getId());
res = pstmt->executeQuery();
while(res->next())
{
    p->setVoto(res->getInt(1));
}

如果eleccion的值来自用户或其他一些不受信任的来源,请确保在连接之前对其进行验证,以防止SQL注入。