Я не понимаю, что не так с кодом, я читал много раз, но я не могу найти ошибку
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() работает правильно
Компилятор не дает никакой ошибки
Вы не можете использовать заполнитель в подготовленном запросе для имени столбца. Он возвращает значение строки 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-инъекцию.