Prüfen ob Datensatz in der DB angekommen ist.


#1
Hallo ich habe es zur Zeit mit einer etwas störrischen Webanwendung zu tun (nicht von mir Entwickelt).

Ich habe in dieser schon einige änderungen durchgeführt die auch recht gut funktionieren.

Bei dieser Webanwendung ist es leider so das manchmal änderungen entweder gar nicht oder nur halb in der Datenbank eingetragen werden.

Da es sich hierbei aber um ein Warenwirtschaft System bald handeln soll, muss ich irgendwie sicherstellen das die änderungen in der DB angekommen sind.

Die Prüfung mit affected_rows via Mysqli kann ich nicht nehmen da nur dort gemeldet wieviele Zeilen betroffen waren.

Kleines Beispiel

TblRechnung:

id,re_nr,idAuftrag,idersatzteil1,idersatzeil2,idersatzteil3,zeitfertig

Es kommt manchmal vor das die ids für die Ersatzteile drin stehen die re_nr aber nicht die idAuftrag oder zeitferitg.

Was ja nicht sein kann da alles in ein und dem selben SQL-Query in die Datenbank gespeichert wird.

Meine Überlegen ist es nun die Querys zu splitten nach re_nr, Ersatzteile etc.

Und direkt auch eine "prüf" Query durchzuführen ob die Daten auch richtig angekommen sind notfalls nochmals die Ursprungs Query drüber laufen lassen.

Wäre dies ein Ansatz oder wie würdet ihr sowas lösen.

Besten Dank

Michael Reinisch
 

Kalito

Erfahrenes Mitglied
#2
Wenn ich dich richtig verstehe, werden bei einem Insert bzw Update nicht alle felder befüllt oder aktualisiert?
Passiert das jedes Mal oder nur hin und wieder? Sind es immer die gleichen Felder oder ändert es sich immer wieder? Kannst du den Fehler reproduzieren?

Ich kann mir nur vorstellen, dass du die fehlenden Werte einfach nicht mitschickst. Warum das so ist kann man nur mit Code analysieren.
 
#3
Es ist immer Sporadisch und nicht immer die gleichen Felder.

Öffne ich die Eingabe Maske und fülle die 100%tig identisch aus werden die Daten eingetragen.

Div. Felder werden sogar dynamisch vorher erzeugt. z.b. zeifertig mit now();

Wenn ich den Fehler reproduzieren könnte wäre ich so abgöttich glücklich,
denn dann könnte ich Ihn auch beheben.

Hatte schon überlegt sql_log zu aktiveren aber dann wird das System recht langsam so das es nicht mehr Produktiv eingesetzt werden kann.
 

ComFreek

Mod | @comfreek
Moderator
#4
Es könnte sich um Nebenläufigkeitsprobleme handeln. Wenn zwei oder mehr Aufrufe (von einem oder mehreren Nutzern) dazu führen, dass PHP-Skripte gleichzeitig auf die DB zugreifen, dann kann es genau dazu kommen, wenn die Skripte nicht dagegen geschützt sind. Maßnahmen wären etwa primär Transaktionen, ggf. auch Sperren auf Skriptebene, wenn Transaktionen nicht ausreichen.
 
#5
Es könnte sich um Nebenläufigkeitsprobleme handeln. Wenn zwei oder mehr Aufrufe (von einem oder mehreren Nutzern) dazu führen, dass PHP-Skripte gleichzeitig auf die DB zugreifen, dann kann es genau dazu kommen, wenn die Skripte nicht dagegen geschützt sind. Maßnahmen wären etwa primär Transaktionen, ggf. auch Sperren auf Skriptebene, wenn Transaktionen nicht ausreichen.
Ich glaub du hast mir die Lösung für eins der Probleme genannt.

Es gibt keine Beleg sperre... Somit könnten 2 User den gleichen beleg bearbeiten.

Sollte dann einer die Belegbearbeitung "unterbrechen" wird zeitfertig gelöscht.

Besten dank...