Вопрос MySql

Начинающий
Статус
Оффлайн
Регистрация
23 Янв 2021
Сообщения
3
Реакции[?]
0
Поинты[?]
0
Всем привет, вылазит данная ошибка: Unknown column 'username' in 'where clause'
При считывании всех данных в БД ошибки нет, так же как и в вписывании в БД
Кто поможет буду очень благодарен, уже 3 день не могу пофиксить данную проблему

Код:

#include <iostream>
#include <mysql.h>
using namespace std;
int qstate;
string username;
string password;

int main()
{

MYSQL_ROW row;
MYSQL_RES* res;
MYSQL* conn, mysql;

conn = mysql_init(NULL);
if (conn == NULL)
{
cout << (stderr, "Error") << endl;

}

if (!mysql_real_connect(conn, "127.0.0.1", "root", "root", "test", NULL, NULL, 0))
{


cout << (stderr, "Error: can't connect to database \n", mysql_error(conn));
}
else
{

cout << (stdout, "Successfuly connected to database!") << endl;
}


cout << "Enter your username: " << endl;
cin >> username;
cout << "Enter your password: " << endl;
cin >> password;



string select_query = (conn, "SELECT * FROM users WHERE login = username AND pass = password");

const char* q = select_query.c_str();

qstate = mysql_query(conn, q);


if (!qstate) {
cout << "Registration succes" << endl;
}
else {
cout << "Error!" << endl << mysql_error(conn) << endl;
}


mysql_close(conn);
system("Pause");
return 0;
}
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
SELECT * FROM users WHERE login = username AND pass = password
Ты просто вписываешь в запрос имя переменной из C++ в тексте запроса MYSQL, но этого недостаточно.
В контексте MYSQL этой переменной не существует, бд думает что это имя колонки, но не находит ее и выбивает ошибку.
C++ это далеко не PHP, чтобы бд узнала от твоих переменных username и password их нужно привязать к запросу.
См MYSQL_BIND
Пожалуйста, авторизуйтесь для просмотра ссылки.
, после связывания нужно будет изменить в запросе username и password на плейсхолдеры "?", т.е. WHERE login = ? и т.д.
Если это слишком сложно для тебя, то можешь поискать готовые либы, которые предоставляют более высокоуровневый и удобный клиент.
Так же ты можешь генерировать запрос подставляя туда значения например через sprintf("WHERE login = %s", username.c_str()), но это будет уязвимо к инъекциям и не прокатит с извлечением данных из бд, рано или поздно придется осваивать подготовленные запросы.
 
Сверху Снизу