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

问题描述 投票:0回答:1

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

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()函数正常工作

编译器不会给出任何错误

c++ mysql
1个回答
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注入。

© www.soinside.com 2019 - 2024. All rights reserved.