我不明白代码有什么问题,我已经阅读了很多次但我找不到错误
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));
}
当eleccion
和id
变量分别为Provincial
和1
时,getInt(1)函数应返回1,但返回0.
命令(在mysql命令行中):
SELECT Provincial from Votos WHERE id=1
返回一个包含一行和一列值为1
的表附注:
检查拼写
getId()函数正常工作
编译器不会给出任何错误
答案 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注入。