Informacje o kolumnach tabeli w PDO i MySQL

pdo-columny-title.jpg

Tym razem szybka porada na temat pozyskiwania informacji o kolumnach tabeli przy pomocy PDO. Informacje takie przydają się przede wszystkim przy tworzeniu różnego rodzaju generatorów formularzy w PHP. Standardowo w MySQL skorzystalibyśmy z przygotowanej do tego celu funkcji mysql_fetch_field, która zwraca nam obiekt z informacjami na temat kolejnych kolumn. PDO samo w sobie posiada ograniczony zakres tego typu funkcji, jest to powiązane z tym, iż nie jest on typowym interfejsem bazy danych, ale bardziej warstwą abstrakcji pozwalająca na zarządzanie danymi z wielu różnych systemów. Informacje o kolumnach możemy pobrać na dwa sposoby.

Używając getColumnMeta

Jedną z możliwości jest skorzystanie z natywnej metody PDO – getColumnMeta. Jak nie trudno zauważyć w manualu metoda ta jest eksperymentalna i jej prawidłowe działanie nie jest gwarantowane. Jej przykładowe zastosowanie może wyglądać tak:

<?php
$res = $this->query('SELECT * FROM table_name LIMIT 1');

$columnCount = $res->columnCount();
for($i=0 ; $i < $columnCount ; $i++){
  $meta[$i]=$res->getColumnMeta($i);
}

print_r($meta);
?>

Zestaw wyników jaki otrzymujemy, jest tablica:

Array
(
  [0] => Array
    (
      [native_type] => LONG
      [flags] => Array
      (
         [0] => not_null
         [1] => primary_key
       )

       [table] => table_name
       [name] => id
       [len] => 8
       [precision] => 0
       [pdo_type] => 2
    )

  [1] => Array
    (
      [native_type] => VAR_STRING
      [flags] => Array
      (
         [0] => not_null
      )

      [table] => table_name
      [name] => url
      [len] => 384
      [precision] => 0
      [pdo_type] => 2
    )
)

Jak widać do dyspozycji mamy kilka informacji. Najczęściej potrzebne będą nazwa pola i jego typ.

Zapytanie SQL

Drugą metodą, właściwie zalecaną w związku z eksperymentalnym charakterem getColumnMeta, jest wykorzystanie zapytania SQL z informacjami o polach tabeli. W przypadku MySQL jest to zapytanie:

<?php
$result = $this->query('SHOW FIELDS FROM table_name');
        
if(!$result)
  echo mysql_error();
else
  while ($res = mysql_fetch_assoc($result))
    $array[] = $res;

print_r($array);
?>

którego wynik wygląda mniej więcej tak:

Array
(
  [0] => Array
  (
    [Field] => id
    [Type] => int(8)
    [Null] => NO
    [Key] => PRI
    [Default] => 
    [Extra] => auto_increment
  )

  [1] => Array
  (
    [Field] => url
    [Type] => varchar(128)
    [Null] => NO
    [Key] => 
    [Default] => 
    [Extra] => 
  )
)

Wyraźnie widać, że wyniki te wyglądają trochę inaczej, więc nie możemy używać tych dwóch metod, naprzemiennie.

Inne metody?

Nie jest to najczęściej używana funkcja baz danych, ale w niektórych momentach bardzo się przydaje. Jeżeli znacie jakieś inne dobre metody na wyciągnięcie informacji o kolumnach zachęcam do dzielenia się wiedzą w komentarzach.

Dodaj komentarz Komentarze są moderowane, a przy linkach używane jest rel="nofollow". Prosimy o nie reklamowanie i nie spamowanie w komentarzach.
Linki tworzone za pomocą tagu [url] np: [url=www.xyz.pl]xyz[/url]
Źródła za pomoc tagu [code] z wskazaniem języka np. [code=php] echo [/code]

Copyright © 2024 Webnote

Projekt i wykonanie: Tworzenie stron internetowych

Dodaj link