[ERLEDIGT] INET_ATON bei ActiveRecord verwenden.

Hallo,

ich wollte einmal Wissen wie ich es am besten umsetzte die IP im integer Format in einer PDO-Datenbank zu speichern.

In MySQL gibt es dafür spezifisch die Funktion INET_ATON - Allerdings bezweifel ich das diese Funktion auch für Sqlite, Orcale und andere Datenabnken existiert.

Also wollte ich mit der PHP Funktion ip2long und long2ip arbeiten. Aber hier habe ich das Problem dass ich signed integers herausbekomme und keine unsigned wie es normalerweise sein sollte.

Somit resultiert eine Abrage wie (SELECT ip FROM counter WHERE ip = ‘-123882333’) immer im nirgentwo (ip UNSIGNED INT).

Wie mache ich es also am besten? Ip doch als String speichern?

Wusste gar nicht, dass es nen Standard gibt, um IP-Adressen in INT umzuwandeln. Hätte die INT-Variante denn irgendeinen Vorteil gegenüber Strings (von den paar gesparten Bytes mal abgesehen)?

Neee, einzig und allein die paar gesparten Bytes… (immerhin 11 Bytes pro Eintrag)… Weiß nicht ob es auch performancemäßig was bringt.

Aber da ich IP Adressen in MySQL immer mit INET_ATON gespeichert habe und mit INET_NTOA auslese wollte ich das jetzt auch mit AR umsetzen.

Naja was kostet festplattenplatz heutzutage?^^

Performancemäßig dürfte sich das nur minimal auswirklen, wahrscheinlich nicht mal im sichtbaren kommastellen bereich.

Kommt natürlich immer auf die Anzahl der Datensätze an. Wenn du’s wirklich unbedingt brauchst, könntest du die Funktion INET_ATON() ja in beforeSave/afterFind im Record (oder auch eingebunden über ein behavior) selber durchführen. Gemäß der MySQL-Referenz macht die nix anderes als:


$ip="A.B.C.D";

 $n=explode('.',$ip);

 $int=$n[0]*256^3 + $n[1]*256^2 + $n[2]*256 + $n[3];

 

Andersrum isses minimal komplizierter… :)

Das ist eine gute Möglichkeit! Danke

Ich weiß auch nicht wieso ich das umbedingt machen möchte… Bin halt irgentwie einer der immer TINYINT nutzt wenn es geht usw…

… was ja prinzipiell nix schlechtes ist ;)

Die Liebe liegt im Detail ;)