Problem z poleceniem Mysql_affected_rows();

0

mój kod wygląda tak:

//moje zapytanie
                                 System::String^ check_query = "SELECT 'Login' FROM `finger`.`users` WHERE `Login` = '";
				 check_query += rej_login;
				 check_query += "';";
	
                                 //konwersja zapytania na odpowiedni typ
				 marshal_context ^context = gcnew marshal_context();
				 check_query_real = context->marshal_as<const char*>(check_query);

                                 //wykonanie zapytania
				 mysql_real_query(conn,check_query_real,300);

                                 //sprawdzanie czy użytkownik istnieje
				 long rows_affected = mysql_affected_rows(conn);
                                 
				 MessageBox::Show(Convert::ToString(rows_affected));
				 if (rows_affected == 0)
				 {
                                  //kod do wykonania
                                 };

Problem jest taki, że mysql_affected_rows() zwraca zawsze wartość -1.
Z dokumentacji wiem, że to oznacza błąd, lecz ja nie potrafię go wyłapać, dlatego proszę o pomoc.

0

To jest C++/CLI czyli .NET.

Po drugie, dla SELECTa używaj mysql_num_rows().

0
help napisał(a)

Pobiera liczbę wierszy przetworzonych w ostatnim zapytaniu INSERT, UPDATE, REPLACE lub DELETE
może i do dokumentacji sięgasz ale czytanie ze zrozumieniem leży. Widzisz tu gdzieś słówko o SELECT?

0
                mysql_real_query(conn,check_query_real,300)));

				 MYSQL_RES* res;

				 long rows_affected = mysql_num_rows(res);
				 MessageBox::Show(Convert::ToString(rows_affected));
				 if (rows_affected == 0)
				 { 
                                  };

teraz mój kod wygląda tak, a program wywala błąd.

An unhandled exception of type 'System.AccessViolationException' occurred in Words_Game.exe

Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
 
0

mysql_num_rows oczekuje jakiegoś faktycznego resultsetu, a nie pustego. Tzn. res nie może wskazywać w kosmos, a ma być wynikiem jakiegoś wcześniejszego zapytania.

0

Dzięki Rev. :D

wystarczyło coś takiego:

 MYSQL_RES* res = mysql_store_result(conn);
0

teraz mam problem z logowaniem, ponieważ wywala mi program.

oto kod:

                //tworzenie zapytania
				 System::String^ log_query = "SELECT `Login` FROM `finger`.`users` WHERE `Login` = '";
				 log_query += log_login;
				 log_query += "' and `Haslo` = '";
				 log_query += log_haslo;
				 log_query += "';";

				 //konwersja na odpowiedni typ
				 marshal_context ^context = gcnew marshal_context();
				 log_query_real = context->marshal_as<const char*>(log_query);
				 delete context;

				 //zapytanie do bazy
				 MessageBox::Show(Convert::ToString(mysql_real_query(conn,log_query_real,400)));

				 MYSQL_RES* log_res = mysql_store_result(conn);

				 int rows_affected_log = mysql_num_rows(log_res);
				 MessageBox::Show(Convert::ToString(rows_affected_log),"ROWS AFFECTED");

				 //zerwanie połączenia z bazą
				 mysql_close(conn);

				 if (rows_affected_log > 0)
				 {
					 MessageBox::Show("Pomyślnie zalogowano","Logowanie");
				 }
				 else
				 {
					 MessageBox::Show("Błąd logowania","Logowanie");
				 };
0

Dlaczego w ogóle piszesz w C++/CLI? Widać, że ewidentnie tego języka nie znasz. Co to za w ogóle pomysł usuwania za pomocą delete obiektu ze sterty zarządzanej?

0

Zaczynam przygodę z C++/CLI, sam nie wiem dlaczego wybrałem akurat ten język, więc ciągle popełniam jakieś błędy. Przeszedłem na ten język z Object Pascala. Programuję w tym języku od jakichś 2 tygodni, dlatego wybaczcie podstawowe błędy. Ktoś ma jakieś rozwiązanie mojego problemu?

1 użytkowników online, w tym zalogowanych: 0, gości: 1