L
lamez
Windows. Mingw. G++. Mysql5141.
Сначала я подключил всё как положено и при компиляции первого MYSQL-тест-приложения получил, что SOCKET из нот э тайп... Дело понятно в чем.
Полез в mysql.h.
Смотрю:
#ifndef my_socket_defined
#ifdef __WIN__
#define my_socket SOCKET
Ну и вышел из положения так:
/* MY */ #define __CYGWIN__
#ifdef __CYGWIN__ /* CYGWIN implements a UNIX API */
#undef WIN
#undef _WIN
#undef _WIN32
#undef _WIN64
#undef __WIN__
#endif
Не знаю, верно ли... Но скомпилилось всё на ура.
Идём дальше. На Qt не обращайте внимания.
Код:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MYSQL *mysql = mysql_init(NULL); // Все другие варианты сегфолтят сразу же
MYSQL_RES *res;
MYSQL_ROW row;
if ( !(mysql_real_connect(mysql, "127.0.0.1", "root", "", "phpmyadmin", 3306, NULL, 0)) )
cout << mysql_error(mysql) << endl;
mysql_query(mysql,"INSERT INTO `temptable` ( `id` ) VALUES ('2121');"); // срабатывает на ура
mysql_query(mysql,"show tables"); // тоже всё нормально
cout << "1" << endl;
if ((res = mysql_use_result(mysql)) == NULL)
cout << "sqlres is null" << endl;
else
{
cout << "2"<< endl;
row = mysql_fetch_row(res);
if (row != NULL){
cout << "row = " << row[0] << endl;
}
//mysql_free_result(res); // [b][font="Arial Black"][color="#FF0000"]ОПА! ЗДЕСЬ ОШИБКА!!! СЕГФОЛТ![/color][/font][/b]
cout << "2.5" << endl;
}
mysql_close(mysql);
cout << "3"<< endl;
cin >> (new char());
return a.exec(); // [b][font="Arial Black"][color="#FF0000"]ОПА! ЗДЕСЬ ОШИБКА!!! СЕГФОЛТ![/color][/font][/b]
}
Ну и если убрать все mysql строки, то никаких сегфолтов.
Если два раза пробовать строку достать:
Код:
row = mysql_fetch_row(res);
row = mysql_fetch_row(res);
Если вызвать
Код:
mysql_free_result(res);
Смотрел кучу аналогичных примеров. Ставил мемсеты на MYSQL*.
И еще если я юзаю MYSQL mysql, и передаю &mysql, то снова будет сегфолт.
Если я делаю так:
Код:
MYSQL *mysql;
mysql_init(mysql);
Скомпилить коннекторы, предлагаемые с dev.Mysql.com под мингв32 не получается. Что делать?
Где ошибки?