J'écris un programme utilisant C++ et l'API MySQL C (version 5.1.31 ubuntu2). Toutefois, si la requête est UPDATE alors j'obtiens une erreur Segmentation Fault lors de l'exécution de la ligne "RowsReturned = mysql_num_rows (Resultat);".Mysql_num_rows() Segfaults
//this code snippet contains only the relevant code
MYSQL_RES *Result;
long RowsReturned;
MYSQL_RES *MYSQLDB::RunQuery(const char* Query)
{
if(mysql_query(Connection, Query))
{
std::cout << "Error: " << mysql_error(Connection);
exit(1);
}
Result = mysql_store_result(Connection);
RowsReturned = mysql_num_rows(Result);
return Result;
}
g ++ en utilisant Compilé 4.3.3 (g ++ test.cpp -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient_r -o Test)
Merci à l'avance.
//this snippet contains the entire class code
class MYSQLDB
{
public:
void Connect(const char* DB);
MYSQL_RES *RunQuery(const char* Query);
long NumRows();
void Close();
MYSQL_ROW GetRow();
private:
MYSQL *Connection;
MYSQL_RES *Result;
MYSQL_ROW Row;
long RowsReturned;
};
void MYSQLDB::Connect(const char* DB)
{
Connection = mysql_init(NULL);
if(Connection == NULL)
{
std::cout << "Error: " << mysql_error(Connection);
exit(1);
}
if (mysql_real_connect(Connection, "localhost", "root", "password", DB, 0, NULL, 0) == NULL)
{
std::cout << "Error: " << mysql_error(Connection);
exit(1);
}
}
MYSQL_RES *MYSQLDB::RunQuery(const char* Query)
{
if(mysql_query(Connection, Query))
{
std::cout << "Error: " << mysql_error(Connection);
exit(1);
}
Result = mysql_store_result(Connection);
RowsReturned = (long)mysql_num_rows(Result); //ERROR!!!!!!!
return Result;
}
long MYSQLDB::NumRows()
{
return RowsReturned;
}
void MYSQLDB::Close()
{
mysql_free_result(Result);
mysql_close(Connection);
}
MYSQL_ROW MYSQLDB::GetRow()
{
return mysql_fetch_row(Result);
}
Merci pour l'aide :)! – Kewley
Pas de problème. :-) – terminus