[ Pobierz całość w formacie PDF ]
.WskaŸnikten jest zwracany podobnie jak w funkcji mysql_store_result, natomiast nienastêpuje faktyczne pobranie danych do zestawu wynikowego, a tylko jegoinicjacja i ustawienie w gotowoœci do przyjêcia danych.[[[ramka]]]Aby naprawdê pobraæ dane, trzeba powtarzaæ wywo³ania mysql_fetch_row tak jakpoprzednio, a¿ do pobrania wszystkich danych.Je¿eli przy wywo³aniu funkcjimysql_use_result wyst¹pi b³¹d, to nastêpuj¹ce po tym pobieranie danych zostaniezak³Ã³cone.[[[koniec ramki]]]Co siê stanie, je¿eli u¿yjemy funkcji mysql_use_result? Potencjalnie zyskujemywiêksz¹ swobodê, poniewa¿ mniej obci¹¿amy sieæ i program klienta, ale istniejetak¿e wada takiego sposobu pobierania danych: przy wywo³aniu mysql_use_resultnie mo¿emy skorzystaæ z funkcji mysql_num_rows, mysql_data_seek, mysql_row_seeki mysql_row_tell.W rzeczywistoœci nie jest to do koñca prawd¹, poniewa¿ mo¿emywywo³aæ mysql_num_rows, lecz nie otrzymamy wtedy liczby dostêpnych wierszy a¿do momentu pobrania ostatniego z nich za pomoc¹ funkcji mysql_fetch_result.Faktycznie wiêc nie przyda siê to do niczego.Powiêkszamy tak¿e opóŸnienie miedzy ¿¹daniami pobrania wiersza, poniewa¿ zaka¿dym razem musi on byæ przesy³any przez sieæ.Dodatkowy problem mo¿e stwarzaæmo¿liwoœæ wyst¹pienia b³êdu sieci podczas utrzymywania otwartego po³¹czenia zbaz¹ danych, zanim wszystkie dane zostan¹ pobrane.Nie bêdziemy wówczas mielirzeczywistego dostêpu do danych, poniewa¿ nie s¹ one przechowywane lokalnie.Mamy tak¿e du¿e korzyœci: wyrównujemy obci¹¿enie sieci i znacznie zmniejszamypotencjalnie du¿e zapotrzebowanie na pamiêæ (ang.storage overhead) w programieklienta.Przy du¿ych zestawach danych prawie zawsze preferuje siê pobieraniewiersza po wierszu za pomoc¹ funkcji mysql_use_result.Zmiana w programie select1.c polegaj¹ca na u¿yciu funkcji mysql_use_result jest³atwa do przeprowadzenia.Otrzymujemy w ten sposób program select2.c, w którymzaznaczyliœmy zmienione wiersze:if (res) {printf("SELECT error: %s\n", mysql_error(&my_connection));} else {res_ptr = mysql_use_result(&my_connection);if (res_ptr) {while ((sqlrow = mysql_fetch_row(res_ptr))) {printf("Fetched data.\n");}if (mysql_errno(&my_connection)) {printf("Retrieve error: %s\n", mysql_error(&my_connection));}}mysql_free_result(res_ptr);}Zwróæmy uwagê na to, ¿e nie jest tu znana liczba wierszy pobranych bezpoœredniopo otrzymaniu wyniku.Oprócz tego u¿yto tutaj wczeœniej stosowanej metodyobs³ugi b³êdów polegaj¹cej na sprawdzaniu wartoœci zwracanej przezmysql_errno(&my_connection).Pisz¹c program wykorzystuj¹cy funkcjêmysql_store_result i maj¹c zamiar zmieniæ j¹ w przysz³oœci na funkcjêmysql_use_result, lepiej od razu wprowadziæ stosowne zmiany.Dla pewnoœci mo¿natak¿e sprawdzaæ wartoœci zwracane przez wszystkie funkcje.Przetwarzanie zwróconych danychSamo pobieranie danych nie ma wiêkszego sensu, je¿eli nie bêdziemy z niminiczego robiæ.Podobnie jak w bazie PostgreSQL, tutaj równie¿ rozró¿nia siê dwarodzaje danych:Rzeczywista informacja pobrana z bazy danych.Informacja na temat danych, czyli tzw.metadane (ang.metadata).Najpierw zobaczymy, jak mo¿na odtwarzaæ i wyœwietlaæ dane, a nastêpnie zajmiemysiê sposobami okreœlania nazw kolumn i innych informacji o danych.W nowszych wersjach MySQL dostêpna jest funkcja mysql_field_client, któraodnosi siê do obiektu po³¹czenia i zwraca liczbê pól w zestawie wynikowym:unsigned int mysql_field_count(MYSQL *connection);Ta funkcja mo¿e byæ tak¿e wykorzystana do bardziej ogólnego przetwarzania, np.do okreœlania, czy przy wywo³aniu mysql_store_result wyst¹pi³ b³¹d.Je¿elimysql_store_result zwróci NULL, ale funkcja mysql_field_count zwraca liczbêwiêksz¹ od zera, to mo¿emy byæ pewni, ¿e w zestawie wynikowym s¹ jakieœ dane,chocia¿ wyst¹pi³ b³¹d przy ich odtwarzaniu.Je¿eli jednak funkcjamysql_field_count zwraca zero, to nie ma ¿adnych kolumn do pobrania, a zatempróba zachowania wyniku nie uda siê.Prawdopodobnie taka metoda bêdzie czêœciej stosowana wówczas, gdy polecenie SQLnie jest znane z góry albo gdy programista chce utworzyæ modu³ przeznaczony doca³kowicie ogólnego przetwarzania zapytañ.W programach wykorzystuj¹cych starsze wersje MySQL mo¿na spotkaæ wywo³aniafunkcji mysql_num_fields [ Pobierz caÅ‚ość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • listy-do-eda.opx.pl