MySQL – przechowywanie adresów IP
06/04/2010 at 17:45 Dodaj komentarz
Zapewne wielu z Was drodzy programiści
pisząc aplikacje oparte o MySQL zastanawiało się jaki typ pola dobrać do przechowywania adresów IP. Być może nie przejżeliście całej dokumentacji MySQL, albo nie doszliście do strony (http://dev.mysql.com/doc/refman/5.1/en/miscellaneous-functions.html#function_inet-aton), na której udokumentowane są funkcje do operowania na adresach IP.
Oczywiście za wiele główkowania tu nie ma, większa część z Was wybrałaby napewno typ VARCHAR i nie jest to bardzo złe rozwiązanie, lecz napewno optymalniej byłoby przechowywać adresy IP w polu typu INT, ponieważ pamięć rezerwowana przez MySQL dla tego typu pola to tylko 4 bajty.
Zastanawiasz się jak to zrobić skoro adres IP zawiera kropki?
Z pomocą przychodzą nam funkcje MySQL, jakimi są INET_ATON() i INET_NTOA(). Pierwsza z nich przekształca podany jej adres IP w ciąg tylko liczbowy (bez żadnych kropek, a tym bardziej innych znaków). Pozwala nam to na zapisanie tak przekształconego adresu IP w polu typu INT.
Zapytanie SQL z funkcją INET_ATON() może wyglądać tak:
sprintf("INSERT INTO users VALUES (INET_ATON('%s'))", mysql_real_escape_string($_SERVER['REMOTE_ADDR']));
Jak odzyskać tak przekształcony adres IP?
Otóż w przypadku przekonwertowania adresu IP do swojej postaci używamy wyżej wymienionej funkcji INET_NTOA().
Przykładowe zapytanie może wyglądać tak:
"SELECT INET_NTOA(ip) ip FROM users LIMIT 1";
Entry filed under: PHP i MySQL. Tags: INET_ATON(), INET_NTOA(), Jak przechowywać adres IP w MySQL?, MySQL - pole dla adresu IP, Przechowywanie adresu IP w MySQL.
Trackback this post | Subscribe to the comments via RSS Feed