MySQL Fehler identfizieren und Meldung erzeugen
Marko
- datenbank
Hallo,
kann mir jemand einen Tip geben, wie ich einen Fehler in MySQL genau identifiziere ? Der Hintergrund:
In einer MySQL Tabelle gibt es mehrere "Unique" Spalten. Wenn beim einfügen eine Verletzung eintritt liefert MySQL error() sowas: Duplicate entry 'raquel' for key 2
Natürlich könnte ich jetzt mit Stringfunktionen nach key 2 suchen, und wüsste welche Spalte betroffen ist. Aber das es key 2 ist, ist ja eher zufällig, ein eindeutiger Name wäre mir lieber.
Wie findet Ihr in Euren Anwendungen heraus was genau passiert ist ? Die Fehlernummer gibt mir ja auch noch keinen Spaltennamen.
Hoffe Ihr versteht mein verlangen :-)
Gruss
Marko
nabend,
kann mir jemand einen Tip geben, wie ich einen Fehler in MySQL genau identifiziere ? Der Hintergrund:
mal versuchen :)
In einer MySQL Tabelle gibt es mehrere "Unique" Spalten. Wenn beim einfügen eine Verletzung eintritt liefert MySQL error() sowas: Duplicate entry 'raquel' for key 2
könnte es sein das mit key 2 der 2 wert in deiner ( ich vermute mal) input anweisung gemeint ist?
wie schaut dein query aus?
grüsse,
hoagie
Hallo hoagie,
könnte es sein das mit key 2 der 2 wert in deiner ( ich vermute mal) input anweisung gemeint ist?
Nein, es ist der 2. key in der Tabelle, der erste ist der primary key, "key 2" ist der Unique Key für das Feld. Aber das Problem ist, wenn ich die Erkennung auf diese Art fest im Quellcode definiere, gibt es Probleme sobald mal die Keys auf der Tabelle geändert werden. Ich würde gerne einen eindeutigen Namen für den Key haben, der in der Fehlermeldung auftaucht, keine von MySQL selbst generierte Nummerierung.
Gruss
Marko
grüsse,
hmm, ich verstehe dein problem, leider weiss ich auch nicht genau wo du ne bessere fehlermeldung herkriegst, die online doku schweigt sich auch aus.. :(
jedenfalls würd ich dir empfehlen, schon bevor du was in die db klatscht, zu überprüfen, ob eventuelle unique items drin vorkommen,
das erspart viel ärger...
cu,
hoagie
Hallo hoagie,
jedenfalls würd ich dir empfehlen, schon bevor du was in die db klatscht, zu überprüfen, ob eventuelle unique items drin vorkommen,
das erspart viel ärger...
Ansichtssache, es ist manchmal einfacher einen Fehler passieren zu lassen, und dann zu reagieren. Wenn ich erst prüfe, und dann einfüge muss ich bei der Eingabe prüfen, und um sicher zu gehen dann doch einen Unique Key auf der Datenbank anlegen. Ich muss also an mindestens 2 Stellen schrauben.
Wenn ich aber nur einen Unique Key anlegen muss, und mein Softwaresystem weiss, wie es allgemein bei einer Verletzung eines Unique Key zu reagieren hat, kann das ziemlich viel Aufwand sparen.
Richtig nett wird so etwas in Vebindung mit Exceptions, die wird es ja bald in PHP auch geben.
Gruss
Marko
hi,
Aber das Problem ist, wenn ich die Erkennung auf diese Art fest im Quellcode definiere, gibt es Probleme sobald mal die Keys auf der Tabelle geändert werden.
wie oft kommt das in der praxis vor - insbesondere, wenn das system _vorher_ gut durchdacht ist?
Ich würde gerne einen eindeutigen Namen für den Key haben, der in der Fehlermeldung auftaucht, keine von MySQL selbst generierte Nummerierung.
mysql bietet ja auch einige möglichkeiten, meta-daten über die DB bzw. ihre tabellen in erfahrung zu bringen, SHOW COLUMNS, SHOW TABLE STATUS etc.
du könntest also zuerst eine solche query starten, und dann mit php auswerten, wie die spalten heissen, und auf welchen ein UNIQUE liegt.
aber wenn du das jedes mal machst, wird's natürlich unperformant.
also ich würd's lassen, der nutzen ist m.E. den aufwand kaum wert.
gruss,
wahsaga
Hallo,
danke erstmal für die Antworten. Ich glaube ich werd doch die Verletzungen vorher überprüfen. Anders wird es wirklich zu aufwändig. Zumindest bis PHP Exceptions integriert hat, und ich durch Abfrage der Eigenschaften der Exception den Fehler genau analysieren kann.
Gruss
Marko