Pobieranie MySQL array przetwarza wyniki selekcji z bazy danych i zwraca w rezultacie tablice zwykłą, asocjacyjną lub obie naraz. W rzeczywistości pobieranie MySQL jest tłumaczeniem informacji otrzymanych na żądanie do bazy danych na formę dogodną do przetwarzania.

W prostych zapytaniach składnia jednego ciągu zaznaczenia jest zamieniana na tablicę, w zapytaniach strumieniowych jest to narzędzie do sekwencyjnego przetwarzania przepływu informacji.

Składnia i przykład aplikacji

Przy wejściu PHP MySQL fetch array otrzymuje wynik zapytania, a format pożądanego wyniku można określić:

  • MYSQL_ASSOC;
  • MYSQL_NUM;
  • MYSQL_BOTH.

W pierwszym przypadku zostanie utworzona tablica asocjacyjna, w drugim tablica z indeksami liczbowymi, a w drugim będzie dostępna tablica z indeksami obu typów.

W wyniku egzekucji $aFetch = mysqli_fetch_array($cResult) zostanie utworzona tablica $aPobierz.

W ten przykład Tablica pobierania MySQL przetwarza oryginalne dane (1). W tabeli są tylko cztery rekordy, każdy z różnymi opcjami pobierania. Wynik przetwarzania próbki (2) jest zszywany w wiersze danych (3): $cFetch, $cFetch1, $cFetch2, $cFetch3.

Wyniki pokazują, że bez określenia stałych MYSQL_ASSOC, MYSQL_NUM i MYSQL_BOTH wynik jest taki sam jak w przypadku MYSQL_BOTH. Te stałe są przestarzałe, a ich użycie jest przestarzałe.

Wykorzystanie tablicy pobierania MySQL

Korzystanie z wyboru wyników zapytania w formacie tablicowym jest bardzo wygodne w programach PHP. dostęp do funkcji Baza danych MySQL zapewnia bezpieczne i niezawodne metody dostęp.

Tablica pobierania MySQL generuje błąd na poziomie ostrzeżenia tylko wtedy, gdy brakuje wartości $cResult lub jest ona nieprawidłowa, a zatem połączenie z bazą danych nie powiodło się. Nazwa $cResult może być dowolna, tutaj jest używana w kontekście przykładu. Na żądanie (2):

  • $cResult = mysqli_query($this->iConnectId, $cQuery);

zmienna $this->iConnectId jest aktywnym połączeniem z bazą danych sformatowanym jako obiekt wielofunkcyjny.

Narzędzie pobierania tablicy MySQL jest proste i wydajne, ale nadal wygodnie jest używać go w sposób obiektowy.

Obiekt dostępu do bazy danych

MySQL to niezwykle proste i wydajne narzędzie do porządkowania informacji. Bazy Dane MySQL Przez cały czas ich stosowania okazały się niezawodnym i wydajnym sposobem przechowywania i uzyskiwania dostępu do danych.

Mechanizm pisania zapytań do bazy danych i ich stosowania jest prosty, ale w praktyce idealnie jest sformatować ją jako obiekt całej bazy danych, pojedynczą tabelę lub określoną strukturę danych.

Konstrukcja pobierania MySQL jest dość uciążliwa w praktyce, zwłaszcza gdy konieczne jest pobranie informacji z jednej tabeli podstawowych informacji, np. kadr, a następnie wybranie danych pracowników z innych tabel:

  • Historia pracy;
  • dane biograficzne;
  • osiągnięcia produkcyjne;
  • obszar kompetencji zawodowych;
  • inne dane.

Z reguły dane te nie będą wypełniane dla wszystkich pracowników, a poza tym wprowadzenie danych dla każdej linii w tabeli kadrowej sprawi, że korzystanie z nich będzie uciążliwe i niewygodne.

Poziom do bazy danych

Zakres pobierania MySQL to przekształcenie danych w tablicę. Można to zrobić na poziomie metody obiektu bazy danych. W takim przypadku programista tworzy narzędzie dla siebie wysoki poziom, który zapewnia dostęp do dowolnej tabeli bazy danych w ten sam sposób.

Następuje wywołanie metody, która natychmiast tworzy wymaganą tablicę danych, a operacje generowania żądania, wykonywania go i przetwarzania wyniku wchodzą do ciała tej metody.

Jest to bardzo wygodne, a konieczność pisania niewygodnych konstrukcji stanowi precedens dla możliwy błąd, odpada. Co najważniejsze, takie podejście upraszcza ewentualne modyfikacje struktury bazy danych, ponieważ nie wykraczają one poza obiekt dostępu do bazy danych. W razie potrzeby trzeba będzie przerobić tylko obiekt dostępu do bazy danych, a nie całą funkcjonalność witryny.

Jeszcze wygodniej jest budować obiekty o przeznaczeniu rzeczywistym nad obiektami dostępu do bazy danych. Na przykład opis personelu, który ma właściwości: lista, wyświetlanie danych o pracowniku, zmiana karty pracownika itp. Narzędzia dostępu do danych są ukryte w trzewiach metod rzeczywistych obiektów, co upraszcza pracę dewelopera i usprawnia jakość wyniku.

Uzyskaj określone pole wynikowe.

Składnia:

int mysql_result(wynik int, wiersz int [, pole mieszane])

Funkcja zwraca wartość pola pole w wierszu wyniku z liczbą wiersz. Parametr pole może określić nie tylko nazwę pola, ale także jego numer - pozycję, na której „stała” kolumna w momencie tworzenia tabeli, a także pełną nazwę pola w postaci: „nazwa_tabeli.nazwa_pola”. Zaleca się jednak, aby wszędzie tam, gdzie to możliwe, używanie nazw pól było poprawne.

Funkcja jest uniwersalna: z jej pomocą możesz „ominąć” cały wynik w jednej komórce. I choć nie jest to zabronione, to jednak nie zaleca się tego robić, ponieważ. mysql_result() działa dość wolno.

mysql_fetch_array

Wyodrębnia następny rekord z wyniku i umieszcza go w tablicy asocjacyjnej.

Składnia:

Tablica mysql_fetch_array (wynik int [, typ_wyniku int])

Funkcjonować mysql_fetch_array() zwraca następny wiersz wyniku jako tablicę asocjacyjną, w której każde pole jest skojarzone z elementem z kluczem pasującym do nazwy pola. Dodatkowo do tablicy zapisywane są elementy z kluczami numerycznymi i wartościami odpowiadającymi wartościom pól z tymi indeksami. W zwracanej tablicy są one umieszczane bezpośrednio po elementach z „zwykłymi” kluczami.

Parametr typ_wyniku określa typ zwróconej tablicy i może przyjąć jedną z następujących wartości: MYSQL_NUM, MYSQL_ASSOC, MYSQL_BOTH(domyślna).

Może pojawić się pytanie: po co nam w ogóle indeksy liczbowe. Odpowiedź jest prosta: faktem jest, że w wyniku selekcji w rzeczywistości mogą pojawić się pola (w rzeczywistości kolumny) o tych samych nazwach, ale odpowiednio o różnych indeksach. Dzieje się tak, gdy próbka WYBIERZ produkowane jednocześnie z kilku stołów.

mysql_connect($host, $użytkownik, $pass); $result=mysql_db_query("baza danych", "wybierz id, nazwę z tabl"); while($row=mysql_fetch_array($wynik)) ( echo "id: ".$row["id"]."
"; echo "id: ".$row."
"; echo "nazwa: ".$row["nazwa"]."
"; echo "nazwa: ".$wiersz."
"; ); mysql_free_result($wynik);

mysql_fetch_row

Zapisuje wpis w tablicy numerowanej.

Składnia:

Tablica mysql_fetch_row (wynik int)

Funkcja zwraca tablicę-listę z wartościami pól następnego wiersza wyniku wynik. Jeśli wskaźnik bieżącej pozycji wyniku został ustawiony poza Ostatni wpis(to znaczy, że wiersze się skończyły), zwracana jest wartość false. Aktualna pozycja jest przesuwana do następnego rekordu, więc następna rozmowa mysql_fetch_row() zwróci następny wiersz wyniku.

Każde pole rekordu jest przechowywane w numerowanym elemencie tablicy. Numeracja zaczyna się od 0.

$r=mysql_query("wybierz * z tabeli OutTable, gdzie wiek

Jak widać, pętla pęknie, gdy tylko skończą się linki, tj. gdy mysql_fetch_row() zwróci fałsz.

mysql_fetch_object

Uzyskaj wpis we właściwościach obiektu.

Składnia:

Obiekt mysql_fetch_object (wynik int)

Funkcja zwraca obiekt, którego właściwości zawierają pola bieżącego rekordu. Jeśli nie ma więcej wpisów, zwraca false.

mysql_connect($host, $użytkownik, $pass); $result=mysql_db_query("baza danych", "wybierz * z tabeli"); while($rows=mysql_fetch_object($wynik)) ( echo $wiersze->id; echo $wiersze->nazwa; );

mysql_fetch_lengths

Zwraca długość elementu wpisu.

Składnia:

Tablica mysql_fetch_lengths (wynik int)

Funkcjonować mysql_fetch_lengths() zwraca długość wartości uzyskanej za pomocą funkcji mysql_fetch_row(), mysql_fetch_array() lub mysql_fetch_object().

Na przykład w poniższym przykładzie:

$arr=mysql_fetch_row($wynik); $len=mysql_fetch_lengths($wynik);

szyk $len będzie zawierać długość odpowiednich elementów tablicy $arr, tj. $len=strlen(arr) itp.

mysql_fetch_field

Zwraca informacje o właściwościach obiektu oraz o polu rekordu.

Składnia:

Obiekt mysql_fetch_field(int wynik [, int pole_offset])

W opcjonalnym parametrze pole_offset ustawiany jest numer pola, którego właściwości chcemy uzyskać. Jeśli ten parametr nie jest określony, za każdym razem, gdy funkcja jest wywoływana mysql_fetch_field() zwracane są właściwości następnego pola w zestawie rekordów wynik.

Zwrócony obiekt ma następujące właściwości:

  • Nazwa- Nazwa pola
  • stół- nazwa tabeli, do której należy pole
  • maksymalna długość- maksymalna długość pola
  • Nie jest zerem- 1 jeśli pole może być puste
  • główny klucz-1 jeśli pole jest polem kluczowym
  • unikalny klucz-1 jeśli w polu dozwolone są tylko unikalne wartości
  • klucz_wielokrotny-1, jeśli pole może mieć zduplikowane wartości
  • liczbowy-1 jeśli pole jest numeryczne
  • kropelka- 1 jeśli pole jest typu BLOB
  • rodzaj- typ pola
  • bez znaku-1 jeśli pole jest numeryczne bez znaku
  • zerowypełnij- 1 jeśli pole jest wypełnione zerami
mysql_connect($host,$użytkownik,$przepustka); $result=mysql_db_query("baza danych", wybierz * z tabeli"); for($i=0;$i "; $param=mysql_fetch_field($result); if(!$param) echo "Brak informacji o właściwościach!" ; echo " name: $param->name table: $param->table max_length: $param->max_length not_null: $param->not_null primary_key: $param->primary_key unique_key: $param->unique_key multiple_key: $param- > multiple_key numeric: $param->numeric blob: $param->typ blob: $param->type unsigned: $param->unsigned zerofill: $param->zerofill "; )

mysql_field_seek

Przenosi kursor do określonego pola.

Składnia:

int mysql_field_seek(int wynik, int pole_offset)

Ta funkcja jest zbędna. Poniższe fragmenty będą równoważne:

$param=mysql_fetch_field($wynik, pole_przesunięcie);

mysql_field_seek($wynik, pole_przesunięcie); $param=mysql_fetch_field($wynik);

mysql_field_name

Zwraca nazwę pola.

Składnia:

String mysql_field_name (wynik int, int filed_index)

Funkcjonować mysql_field_name() zwraca nazwę pola, które znajduje się w wyniku wynik z indeksem filed_index(numeracja zaczyna się od 0).

$result=mysql_query("ID WYBORU, nazwa z tabeli"); echo mysql_field_name($wynik,1); // Dane wyjściowe: nazwa

mysql_field_table

Zwraca nazwę tabeli, z której pobrano pole.

Składnia:

String mysql_field_table (wynik int, int field_offset)

Zwraca nazwę tabeli, z której zostało pobrane pole z offsetem pole_offset w rezultacie wynik.

mysql_field_len

Zwraca długość pola.

Składnia:

int mysql_field_len (wynik int, int filed_offset)

W wyniku funkcja zwraca długość pola wynik. Pole, jak zwykle, jest ustawiane przez podanie jego przesunięcia. Długość tutaj nie oznacza rozmiaru danych pola w bajtach, ale rozmiar, który został określony podczas jego tworzenia. Na przykład, jeśli pole jest typu varchar i zostało utworzone (wraz z tabelą) z typem warchar(100), wtedy 100 zostanie za to zwrócone.

mysql_field_type

Zwraca typ zestawu rekordów wyniku.

Składnia:

String mysql_field_type (wynik int, int filed_offset)

Ta funkcja jest podobna do mysql_filed_name(), zwraca tylko nie nazwę, ale typ odpowiedniej kolumny w wyniku. Mogą to być na przykład int, podwójnie, prawdziwy itp.

mysql_connect($host,$użytkownik,$przepustka); mysql_select_db("mojabaza"); $result=mysql_query("WYBIERZ * Z tabl"); $fields=mysql_num_fields($wynik); $wiersze=mysql_num_rows($wynik); $i=0; $table=mysql_field_table($wynik,$i); echo "Tabela "$tabela" ma $pola pól i $wiersze rekordów
"; echo "Struktura tabeli:
"; while($i"; $i++; )

mysql_field_flags

Ta funkcja zwraca flagi użyte do utworzenia określonego pola w tabeli.

Składnia:

string mysql_field_flags (wynik int, int pole_offset)

Zwrócony ciąg to zestaw słów oddzielonych spacjami, więc można go przekonwertować na tablicę za pomocą funkcji eksplodować():

$Flags=explode(" ",mysql_field_flags($r,$field_offset));

Pola rekordów w MySQL może mieć następujące właściwości flagi:

  • "Nie jest zerem"
  • "główny klucz"
  • "unikalny klucz"
  • "wielokrotny_klucz"
  • kropelka
  • „niepodpisany”
  • „wypełnianie zerowe”
  • "dwójkowy"
  • wyliczenie
  • "auto_inkrementacja"
  • "znak czasu"

mysql_list_fields

Zwraca listę pól tabeli.

Składnia:

int mysql_list_fields(ciąg nazwa_bazy_danych, ciąg_nazwa_tabeli [,identyfikator_łącza_int])

Funkcjonować mysql_list_fields() zwraca informacje o podanej tabeli nazwa_tabeli w bazie danych imię i nazwisko, używając identyfikatora połączenia identyfikator_linku jeśli jest ustawiony (w przeciwnym razie ostatnie otwarte połączenie). Zwracana wartość to identyfikator wyniku, który można przeanalizować w normalny sposób. Jeśli wystąpi błąd, zwracane jest -1, tekst komunikatu o błędzie można pobrać w zwykły sposób.

$link=mysql_connect($host,$użytkownik,$przepustka); $fields=mysql_list_fields("db1", "tabela", $link); $kolumny=mysql_num_fields($pola); // liczba pól w tabeli // Następnie wypisz nazwy wszystkich pól w tabeli for($i=0;$i"; )

mysql_num_fields

Ta funkcja zwraca liczbę pól w jednym wierszu wyniku, tj. liczba kolumn w wyniku.

Składnia:

int mysql_num_fields (wynik int)

Na mocy tego, co zostało powiedziane, funkcja pozwala określić poziomy wymiar „dwuwymiarowej tablicy wyników”.

mysql_errno

Zwraca numer ostatniego błędu.

Składnia:

int mysql_errno()

Ta funkcja zwraca numer ostatniego zgłoszonego błędu lub 0, jeśli nie ma błędów.

Identyfikator identyfikator_linku można pominąć, jeśli podczas wykonywania skryptu nawiązano tylko jedno połączenie.

mysql_connect("nazwa_bazy_danych"); echo mysql_errno().": ".mysql_error()."
";

mysql_error

Zwraca komunikat o błędzie.

Składnia:

Ciąg mysql_error()

Ta funkcja zwraca ciąg zawierający tekst komunikatu o błędzie lub pusty ciąg, jeśli nie było błędów.

mysql_connect("nazwa_bazy_danych"); echo mysql_errno().": ".mysql_error()."
";

$query = "SELECT col1,col2,col3 FROM table WHERE id > 100" $result = _query($query);

dla tej akcji:

Chociaż ($row = mysql_fetch_array($wynik))( .... )

czy tworzy 1 pętlę (powtórzoną x razy)?

a do tego:

$wiersz = mysql_fetch_array($wynik) foreach($wiersz jako $r)( ... )

czy robi 2 pętle (powtórzone x razy)?

gdzie x to liczba wyników

EDYTOWAĆ:

ok dzięki chłopaki ok zasadniczo sformułowałem to pytanie naprawdę bardzo źle.

z perspektywy czasu powinno być

"mysql_fetch_array() zwraca tylko jeden wiersz przy każdym wywołaniu"

Cieszę się, że moje zrozumienie mysql_fetch_array() było v. Niewierny!

Dziękuję za Twój czas!

Zakładam pętlę mysql_fetch_array() perfroms, więc jestem zainteresowany użyciem while() w połączeniu z nim, jeśli zachowuje zagnieżdżoną pętlę.

Nie. mysql_fetch_array po prostu zwraca następny wiersz wyników i przesuwa wewnętrzny wskaźnik. On się nie rozłącza. (Wewnętrznie może, ale nie musi, używać gdzieś jakiejś pętli, ale to nie ma znaczenia.)

Chociaż ($row = mysql_fetch_array($wynik)) ( ... )

Wykonuje to następujące czynności:

  1. wiersz jest przypisany do $row
  2. wyrażenie jest oceniane i jeśli zwróci wartość true , zawartość pętli jest wykonywana
  3. procedura jest uruchamiana ponownie
$wiersz = mysql_fetch_array($wynik); foreach($wiersz jako $r) ( ... )

Wykonuje to następujące czynności:

  1. mysql_fetch_array pobiera i zwraca następny wiersz
  2. wiersz jest przypisany do $row
  3. foreach wykonuje pętle nad zawartością tablicy i wykonuje zawartość pętli tyle razy, ile jest elementów w tablicy

W obu przypadkach mysql_fetch_array robi to samo. Piszesz tyle cykli. Jednak obie konstrukcje nie robią tego samego. Drugi będzie działał tylko na jednym wierszu wyniku, podczas gdy pierwszy będzie iterować po wszystkich wierszach.

Biorąc pod uwagę, że zwracany jest tylko jeden wiersz, w obu przypadkach zostanie wykonana tylko jedna pętla. Chociaż sprawdzi, czy pętla dwukrotnie wchodzi w warunek.

Po pierwsze: twój program wykona pętlę raz dla każdego wiersza w zestawie wyników zwróconym przez zapytanie. Możesz z góry wiedzieć, ile jest wyników za pomocą mysql_num_rows() .

Po drugie: tym razem używasz tylko jedna linia zestaw wyników i robisz coś dla każdego z kolumny. Oto, co robi konstrukcja foreach: przechodzi przez ciało pętli dla każdego wpisu w tablicy $row. Ile razy program wykona pętlę przez pętlę jest znany z góry: wykona pętlę raz dla każdej kolumny w zestawie wyników (co prawdopodobnie znasz, ale jeśli chcesz to określić, możesz użyć count($row)) .

$query = "SELECT col1,col2,col3 FROM table WHERE id > 100" $result = mysql_query($query); if(mysql_num_rows($result)>0) ( while($row = mysql_fetch_array()) //tutaj możesz użyj wielu funkcji, takich jak mysql_fetch_assoc() i inne ( //Zwraca 1 wiersz do zmiennej, która staje się tablicą i automatycznie przechodzi do następnego ciągu wynikowego Echo $row["col1"]."|".Echo $row["col2 "]."|".Echo $wiersz["kol2"]; ) )

Tak, mysql_fetch_array() zwraca tylko jeden wynik. Jeśli chcesz uzyskać więcej niż jedną linię, musisz umieścić wywołanie funkcji w pętli while.

Dwa przykłady:

To zwróci tylko pierwszy wiersz

$wiersz = mysql_fetch_array($wynik);

To zwróci jeden wiersz w każdej pętli, dopóki nie będzie więcej wierszy w zestawie wyników

While($row = mysql_fetch_array($result)) ( //Zrób rzeczy z zawartością $row )

Pierwsza linia:

$wynik = mysql_query($zapytanie);

zwróć zasób php db.

Drugi rząd

Chociaż ($row = mysql_fetch_array($wynik))

Przechodzi przez wszystkie rekordy zwrócone przez zapytanie.

Zamiast tego użyj mysql_fetch_assoc
W tym przypadku ciąg ma pary klucz => wartość.
Natomiast po prostu umieść to:
print_r($row) i zrozumiesz
Jeśli używasz mysql_fetch_assoc, format ciągu będzie następujący:

$wiersz["nazwa_kolumny"] = wartość_kolumny1; $wiersz["nazwa_kolumny"] = wartość_kolumny2;

Dla tego:

$row = mysql_fetch_assoc($wynik) foreach ($wiersz jako $columnName => $columnValue) ( ​​... )

Otrzymasz pierwszy wiersz z zapytania i przejdziesz w pętli przez wszystkie kolumny w pierwszym wyniku zapytania.