Informacje o kolumnach tabeli w PDO i MySQL
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]