Przejdź do treści

Centrum Kształcenia Zawodowego i Ustawicznego w Mrągowie

Aliasy SQL i mysqli_result

środa,

Aliasy SQL i mysqli_result

Dla kolumn i tabel w zapytaniu SQL można stosować nazwy zastępcze nazywane aliasami. Czasami ułatwia to pracę, np. nazwy są krótsze i bardziej czytelne. Stosowanie aliasów wpływa na sposób korzystania z niektórych metod obiektu mysqli_result, tworząc kod, należy to uwzględnić.

Wykorzystana w przykładach tabela jest dostępna do pobrania. Jest to zbiór informacji na temat krajowych domen najwyższego poziomu, zawiera nazwy jednostek terytorialnych i zarezerwowane dla nich dwuliterowe domeny.

Wszystkie prezentowane w materiale przykłady można przetestować, wstawiając kod do poniższego skryptu. Należy pamiętać o wpisaniu własnych danych potrzebnych do połączenia się z bazą. Metoda set_charset() służy do ustawienia zestawu znaków używanego do wymiany danych z serwerem MySQL.

<?php

  define('DBHOST', 'localhost');
  define('DBUSER', 'użytkownik');
  define('DBPASS', 'hasło');
  define('DBNAME', 'nazwa_bazy');

  $mysqli = new mysqli(DBHOST, DBUSER, DBPASS, DBNAME);
  $mysqli->set_charset("utf8");

/* TUTAJ WSTAW KOD PRZYKŁADÓW */

  $result->close();
  $mysqli->close();

?>

W poniższym zapytaniu nie zastosowano aliasów. Jednym z pól wyniku zapytania jest obliczona długość ciągu znaków określającego jednostkę terytorialną, do której przypisano domenę, jego nazwa będzie wyglądać dziwnie i może sprawiać spore problemy przy odwołaniach dla początkujących programistów.

$result = $mysqli->query("SELECT name, entity, LENGTH(entity) FROM domains LIMIT 2");

while ($row = $result->fetch_object()) {
  print_r($row);
}

/*
stdClass Object
(
    [name] => ac
    [entity] => Wyspa Wniebowstąpienia
    [LENGTH(entity)] => 23
)
[...]
*/

W uzupełnieniu poprzedniego przykładu przedstawiono sposób odwołania się do własności obiektu z nawiasami w nazwie.

echo $row->{'LENGTH(entity)'};

Zdecydowanie lepszym rozwiązaniem jest zastosowanie aliasu dla potencjalnie problematycznej nazwy, w tym przypadku jest to litera „l”, ale oczywiście alias może być bardziej opisowy. Istnienie aliasu należy uwzględnić w operacjach na danych zwracanych przez metodę fetch_object() i posługiwać się nazwą aliasu, a nie nazwą tabeli.

$result = $mysqli->query("SELECT name, entity, LENGTH(entity) as l FROM domains LIMIT 2");

while ($row = $result->fetch_object()) {
  printf('%s - %s (%d)
', $row->name, $row->entity, $row->l); }

Podczas pobierania danych w formie tablicy asocjacyjnej za pomocą metody fetch_assoc(), także trzeba uwzględnić istnienie aliasu. Sytuacja będzie podobna przy niektórych wywołaniach metod fetch_all() oraz fetch_array(), wtedy kiedy zwracane dane wystąpią jako tablice asocjacyjne.

$result = $mysqli->query("SELECT entity, LENGTH(entity) as l FROM domains LIMIT 2");

while ($row = $result->fetch_assoc()) {
  printf('%s (%d)
', $row['entity'], $row['l']); }

W poniższym przykładzie aliasy zastosowano dla kolumny i nazwy tabeli. Na podstawie wyników zwróconych przez metodę fetch_field_direct() można się o tym zorientować:

  • name – nazwa kolumny jest różna od oryginalnej, oznacza to alias;
  • orgname – oryginalna nazwa kolumny;
  • table – nazwa tabeli jest różna od oryginalnej, oznacza to alias;
  • orgtable – oryginalna nazwa tabeli, z której pochodzi pole.
$result = $mysqli->query("SELECT d.entity as e FROM domains as d LIMIT 2");

print_r($result->fetch_field_direct(0));
/*
stdClass Object
(
    [name] => e
    [orgname] => entity
    [table] => d
    [orgtable] => domains
    [def] => 
    [db] => x2x
    [catalog] => def
    [max_length] => 23
    [length] => 180
    [charsetnr] => 33
    [flags] => 4097
    [type] => 254
    [decimals] => 0
)
*/

Podobne jak w ostatnim przykładzie dane zwrócą metody fetch_fields() oraz fetch_field().

Artykuł: Olimpiada Zdrowia PCK

Olimpiada Zdrowia PCK

Artykuł: Zostań dawcą szpiku!

Zostań dawcą szpiku!

Artykuł: Przeglądarka Vivaldi

Przeglądarka Vivaldi

Artykuł: Lenovo

Lenovo

Artykuł: Światowy Dzień Oszczędzania

Światowy Dzień Oszczędzania

Nasze technikum

Technik informatyk

Szkoły dla dorosłych

Nasza szkoła

Pełna oferta edukacyjna

Oferta szkoły