php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.03.2007, 18:15  
Erfahrener Benutzer
 
Registriert seit: 17.11.2003
Beiträge: 212
R4v3r
Standard Problem mit doppelten Einträgen

Hallo!

Ich habe eine Tabelle, die als IP-Sperre fungiert.

Nun ist mir aufgefallen, dass es immer mal wieder vorkommt, dass IPs doppelt in dieser Tabelle sind, obwohl das lt. Script nicht passieren dürfte.

Diese Einträge haben zusätzlich immer die gleiche Visit-Zeit (auf die Sekunde genau).

Habe nun lange mein Script nach Fehlern durchsucht, dort aber nichts gefunden.

Ich gehe nun davon aus, dass die Seite innerhalb einer Sekunde von den entsprechenden Usern 2 mal geladen wird, während der INSERT Befehl noch in der Warteschleife der Datenbank hängt. Somit ist beim 2. Aufruf noch kein Eintrag mit dieser IP vorhanden und es wird ein neuer Eintrag an die DB geschickt.

Gibt es irgend etwas, wie ich dieses Problem lösen kann? z. B. durch ein ggf. vorhandenes Gegenstück des "LOW_PRIORITY" Befehls??

Danke für die Hilfe!
R4v3r ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.03.2007, 18:35  
Erfahrener Benutzer
 
Registriert seit: 03.03.2007
Beiträge: 112
Schnulli
Standard

Wenn Du sowas mit SELECT und INSERT zusammenbastelst, hast Du eine Lücke zwischen den beiden Anweisungen, es ist keine atomare (unteilbare, ununterbrechbare) Operation. Was dabei rauskommen kann, nennt sich Race Condition

Markier die Spalte in mysql als unique (einzigartig). Dann kannst Du Dir das SELECT komplett sparen. Mysql liefert einen Fehler zurück, wenn ein zweiter Datensatz mit gleichen Werten in unique Spalten eingetragen wird. Also entweder Fehlercode abtesten oder http://dev.mysql.com/doc/refman/5.0/...duplicate.html verwenden.
Schnulli ist offline   Mit Zitat antworten
Alt 29.03.2007, 13:54  
Erfahrener Benutzer
 
Registriert seit: 17.11.2003
Beiträge: 212
R4v3r
Standard

Ok, danke das hilft mir weiter.

Aber ist der Rückgabewert (rows-affected) überhaupt immer stimmig? (1 = neuer Eintrag, 2 = Aktualisierung des bereits vorhanden Eintrags)

Wartet das Script also, bis der ggf. 2. INSERT drin ist? Was wäre, wenn die Warteschleife für den INSERT Befehl noch 1 Min. dauern würde? Würde das Script dann so lange warten um auf den Rückgabewert dieses Befehls zu warten?

Oder wird direkt geguckt, ob es den Primärschlüssel schon gibt und dementsprechend der Wert zurückgegeben, was ja wieder zu Fehlern führen kann, wenn der 1. INSERT Befehl noch in der Schleife hängt.

Ich hoffe ich habe es halbwegs verständlich formuliert...
R4v3r ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
Sessions Problem StephenKing PHP Tipps 2008 3 16.10.2007 08:30
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
Array Problem [Ansatz ?] PHP Tipps 2005 0 27.01.2005 18:24
Problem bei Massenmails versenden mit der Funktion mail PHP-Fortgeschrittene 3 19.01.2005 13:36
Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Problem mit Weiterleitung PHP Tipps 2004-2 16 22.12.2004 17:49
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
PHP Upload (Master Value/Local Value Problem) PHP-Fortgeschrittene 5 23.11.2004 07:21
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
[Erledigt] Problem mit Timestamp! PHP Tipps 2004 24 08.06.2004 19:51
Login Problem PHP Tipps 2004 4 04.06.2004 18:46
foreach problem mAy^daY PHP Tipps 2004 3 02.06.2004 20:29


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.