Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2012, 21:33   #61
Huntert
 
Регистрация: 08.01.2012
Сообщений: 5
По умолчанию

Ничего не выходит, все тоже самое (рисуется консоль и все "падает")...
Huntert вне форума Ответить с цитированием
Старый 10.01.2012, 21:39   #62
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Копирую в папку с проектом это:
c:\Program Files\MySQL\MySQL Server 5.1\lib\debug\libmysql.dll
попробуйте подключить
c:\Program Files\MySQL\MySQL Server 5.1\bin\libmysql.dll
psycho-coder вне форума Ответить с цитированием
Старый 10.01.2012, 23:23   #63
Huntert
 
Регистрация: 08.01.2012
Сообщений: 5
По умолчанию

Я пробовал ранее подключать и "ее", результат не меняется...
Наверное кривая IDE-шка или у меня слишком кривые руки...
Huntert вне форума Ответить с цитированием
Старый 10.01.2012, 23:40   #64
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Только обратил внимание на
Код:
if (mysql_real_connect(conn, "localhost", "root", "root", NULL, 0, "3306", 0) == NULL) {
      printf("Error connect %u: %s\n", mysql_errno(conn), mysql_error(conn));
      exit(1);
  }
тут есть ошибки
Цитата:
if (mysql_real_connect(conn, "localhost", "user", "pass", "database", 3306, NULL, 0) == NULL) {
printf("Error connect %u: %s\n", mysql_errno(conn), mysql_error(conn));
exit(1);
}
Жирным выделен исправленный участок. Нужно заменить на соответствующие данные.
Порт - это число!
подробней
http://dev.mysql.com/doc/refman/5.1/...l-connect.html
psycho-coder вне форума Ответить с цитированием
Старый 17.01.2012, 08:28   #65
Huntert
 
Регистрация: 08.01.2012
Сообщений: 5
По умолчанию

Все, вопрос закрыт!!! psycho-coder - спасибо за содействие (нужно было конвертировать библиотеку libmysql), а в mysql_real_connect действительно порт задан не верно был))
Huntert вне форума Ответить с цитированием
Старый 15.02.2012, 23:00   #66
ReDFoX43rus
 
Регистрация: 13.02.2012
Сообщений: 4
По умолчанию

Код:
int CRunner::Auth(const char *login, const char *pass)
{
	char query[128];
	str_format(query, sizeof(query), "SELECT * FROM users WHERE login=%s", login);
	MYSQL mysql; // Дескриптор соединения
	MYSQL_ROW row; // Массив полей текущей строки
	MYSQL_RES *res; // Дескриптор результирующей таблицы
	MYSQL_FIELD *field; // Название поля

	char host[] = "localhost"; // хост 
	char user[] = "root"; // пользователь
	char passwd[] = ""; // пароль
	char db[] = "phpblog"; // название базы данных
	int port = 0; //  порт. Если порт у сервера MySQL не по умолчанию (3306), то нужно указывать конкретный номер порта
				
	mysql_init(&mysql);  // Инициализация
	if(!mysql_real_connect(&mysql, host, user, passwd, db, port, NULL, 0)) // соединение
	{
		mysql_free_result(res); // Очищаем результаты
		mysql_close(&mysql); // Закрываем соединение
		return -2;
	}
	if (mysql_query(&mysql, (const char *)query) > 0) // запорс. Если ошибок нет, то продолжаем работу
	{
		// Если была ошибка, ...
		mysql_free_result(res); // Очищаем результаты
		mysql_close(&mysql); // Закрываем соединение
		return -1; // возвращаем значение ошибки 
	}

	res = mysql_store_result(&mysql);
	int num_fields = mysql_num_fields(res);

	for (int i = 0; i < num_fields; i++) // Выводим названия полей
    {
		field = mysql_fetch_field_direct(res, i); // Получение названия текущего поля
		if(field->name == "pass")
		{
			row = mysql_fetch_row(res);
			if(row[2] == pass)
			{
				mysql_free_result(res); // Очищаем результаты
				mysql_close(&mysql); // Закрываем соединение
				return 1;
			}
		}
    }
	mysql_free_result(res); // Очищаем результаты
	mysql_close(&mysql); // Закрываем соединение
	return 0;
}
Почему-то всегда возврщает -1, хотя запрос верный и таблица есть
Помогите, мб кто-то сталкивался
ReDFoX43rus вне форума Ответить с цитированием
Старый 16.02.2012, 10:41   #67
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Выведите код и сообщение ошибки
mysql_error(&mysql);
mysql_errno(&mysql);
psycho-coder вне форума Ответить с цитированием
Старый 16.02.2012, 21:54   #68
ReDFoX43rus
 
Регистрация: 13.02.2012
Сообщений: 4
По умолчанию

Ошибка устранена, но есть другая проблема
Задача такова:
Идет запрос, например,
Код:
"SELECT * FROM user WHERE login=ReD|FoX43.rus"
Он нашел:

Как проверить совпадает ли поле "pass" с 123 (например)

Код:
int CRunner::Auth(const char *login, const char *pass)
{
	char query[128];
	str_format(query, sizeof(query), "SELECT * FROM users WHERE login=%s", login);
	MYSQL mysql; // Дескриптор соединения
	MYSQL_ROW row; // Массив полей текущей строки
	MYSQL_RES *res; // Дескриптор результирующей таблицы
	MYSQL_FIELD *field; // Название поля

	char host[] = "localhost"; // хост 
	char user[] = "root"; // пользователь
	char passwd[] = ""; // пароль
	char db[] = "phpblog"; // название базы данных
	int port = 0; //  порт. Если порт у сервера MySQL не по умолчанию (3306), то нужно указывать конкретный номер порта
				
	mysql_init(&mysql);  // Инициализация
	if(!mysql_real_connect(&mysql, host, user, passwd, db, port, NULL, 0)) // соединение
	{
		return -2;
	}
	if (!mysql_query(&mysql, (const char *)query)) // запорс. Если ошибок нет, то продолжаем работу
	{
		// Если была ошибка, ...
		return -1; // Возвращаем значение ошибки 
	}

	res = mysql_store_result(&mysql);
	int num_fields = (int)mysql_field_count(&mysql); // Считываем кол-во полей
	if(num_fields < 1)
		return -3;

	for (int i = 0; i < num_fields; i++) // Выводим названия полей
    {
		field = mysql_fetch_field_direct(res, i); // Получение названия текущего поля
		if(field->name == "pass")
		{
			row = mysql_fetch_row(res);
			if(row[2] == pass)
			{
				mysql_free_result(res); // Очищаем результаты
				mysql_close(&mysql); // Закрываем соединение
				return 1;
			}
		}
    }
	mysql_free_result(res); // Очищаем результаты
	mysql_close(&mysql); // Закрываем соединение
	return 0;
}
Возвращает -3 (или я что-то не так делаю, т.к. в php не силен)
И не могли бы Вы сказать, правильный ли код дальше?)
Заранее благодарю
Изображения
Тип файла: png mysql_problem1.png (7.1 Кб, 209 просмотров)
ReDFoX43rus вне форума Ответить с цитированием
Старый 17.02.2012, 12:51   #69
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Как проверить совпадает ли поле "pass" с 123 (например)
Все гораздо проще
Код:
str_format(query, sizeof(query), "SELECT login, pass FROM users WHERE login='%s' AND pass='%s'", login, pass);
не забывайте брать в ковычки/апострофы строковые значения. Такой запрос вернет одну запись, если есть совпадения. Если нет выводите что-то вроде "Логин и/или пароль введен не верно". И для выборки достаточно login и pass поля взять. Старайтесь избегать * в запросах, лучше перечислить нужные поля
psycho-coder вне форума Ответить с цитированием
Старый 17.02.2012, 13:15   #70
ReDFoX43rus
 
Регистрация: 13.02.2012
Сообщений: 4
По умолчанию

Спасибо, в свое оправдание скажу, что проходил php+mysql по старому курсу =)
ReDFoX43rus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с MySQL в С++ с использованием библиотеки mysql++ oleg kutkov Visual C++ 5 30.12.2010 16:40
Работа с MySQL в Дельфи 7 drakhar БД в Delphi 8 01.12.2010 21:13
Работа с MySQL igroman PHP 10 29.09.2008 16:15
Работа с MySql zetrix PHP 1 18.06.2007 15:02