MySQL – przechowywanie adresów IP

06/04/2010 at 17:45 Dodaj komentarz

Zapewne wielu z Was drodzy programiści :D 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: , , , , .

Funkcja str_replace() – emotki w PHP

Dodaj komentarz

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Zmień )

Twitter picture

You are commenting using your Twitter account. Log Out / Zmień )

Facebook photo

You are commenting using your Facebook account. Log Out / Zmień )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed


Kategorie

Licznik odwiedzin

  • 1,737 odwiedzin

Follow

Otrzymuj każdy nowy wpis na swoją skrzynkę e-mail.