Hallo,
Warum wandelst Du die IP-Adresse um?
Varchar(15) würde wesentlich mehr speicher verbrauchen, als unsigned int(10), außerdem durch Indexierung nacher ein großer Geschwindigkeitsvorteil. Siehe http://phpperformance.de/ip-adressen-optimal-speichern/
optimiere kein Performance-Problem, das Du nicht hast.
Weiter:
a) Speicherplatz ist das allergeringste Problem, wenn es je IP-Adresse
gerade mal einen einzigen Eintrag gibt. Ganz besonders, wenn ich an
die regulären Inhalte je IP-Adresse denke, die sicher ein Vielfaches
dieses Platzes belegen.
b) bezweifle ich die Richtigkeit des Benchmarks:
Suchoperation auf einer indexierten Spalte benötigt genausolange
wie auf einer nicht indexierten Spalte. Da ist was faul! Und somit
das Fazit des Artikels hinfällig.
c) würde ich, wenn überhaupt, MySQL die Umwandlung übertragen.
Oh ja, und ein paar Byte mehr an die DB übermitteln. Aber gerne!
d) Gleichfalls würde ich das Erzeugen des Zeitstempels der DB überlassen
und dafür einen angemessenen Datentyp verwenden.
$DB_IP = mysql_query("SELECT IP,Date FROM test WHERE IP = '$IP'");
if(mysql_affected_rows() == 1) {Warum verwendest Du hier mysql_affected_rows()?
Was möchtest Du hier mit mysql_affected_rows() testen? Eine Operation, die in Deinem vorgestellten Code nicht vorkommt? Möchtest Du nicht eher mysql_num_rows() verwenden?
Warum verwendest Du nicht eine Abfrage, die schlicht und einfach eine einzige Zeile mit einer Spalte zurückliefert, die den gewünschten boolschen Wert enthält? Das wäre doch viel einfacher. MySQL hat alle notwendigen Funktionen eingebaut. Nutze sie.
Gut, ein Punkt für dich, das werde ich machen. Eine Simple Vereinfachung ...
Ja, wirf alles aus dem PHP-Code raus, was die DB machen kann. Du sparst zunächst 80% der Codezeilen ein und kannst Dich dann ...
Warum fehlt die Fehlerbehandlung?
Fehlt nicht, ist in den if und else Blöcken versteckt, die alle Möglichkeiten abfangen, oder meinst du etwas anderes?
... um die Fehlerbehandlung, wie von Chris skizziert, kümmern.
Freundliche Grüße
Vinzenz