2012-04-11 7 views
4

Etwas wirklich komisch geht mit meiner Datenbank. Ich verwende PHP, um Daten in meine Datenbank einzufügen, und das mache ich seit 2 Jahren ohne Probleme. Wenn ein Kunde eine Zahlung auf meiner Website tätigt, speichere ich alle Daten aus dieser Transaktion in meiner Datenbank. Jede Transaktion hat eine eindeutige "transaction_id". Wenn ich die Zahlungsinformationen in die Datenbank einfüge, werden alle Informationen mit Ausnahme der "transaction_id" korrekt eingefügt. Alle Transaktionen erhalten die "transaction_id" von "4294967295". Also habe ich ein paar Tests gemacht. Hier ist, was ich getan habe:mysql Datenbank einfügen ändert alle IDs zu 4294967295

1) Ich echote die "transaction_id" auf meinem Bildschirm, um zu sehen, was würde sagen. Das Ergebnis war, dass die "transaction_id", die ausgegeben wurde, RICHTIG war. Es war nicht die Wiederholung "4294967295". Wenn ich jedoch in meine Datenbank schaue, wird "4294967295" angezeigt.

2) Dieses Mal entschied ich mich, die Abfrage in meinem Webbrowser auszugeben. Die Abfrage war RICHTIG. In der Abfrage befand sich die CORRECT "transaction_id" in der Abfrage. Wenn ich jedoch in meine Datenbank schaue, wird "4294967295" angezeigt.

Ich habe 3 verschiedene Seiten, wo Kunden Zahlungen leisten können. ALLE 3 Seiten haben damit am 6. April 2012 begonnen. Keine dieser Seiten wurde verändert. Ich habe diese Seiten seit über 2 Jahren nicht mehr verändert. Jede Hilfe wird sehr geschätzt!

+0

nur um die Funktionalität zu verkünden Ich würde vorschlagen, dass Sie die Datenbank ohne irgendwelche Daten, Trigger, ... Erstellen Sie eine neue Datenbank mit diesem Skript verbinden Sie Ihre Website mit der neuen db nur zu sehen wenn es eine Art von Hack ist. Cos auf den ersten Blick sieht es wie ein Hack aus. Stellen Sie sicher, dass Sie keine Trigger oder Ähnliches in der Datenbank haben. – Jester

+1

Für die Liebe aller Dinge mit Apostrophen in ihnen, dreißig Minuten verbringen und lesen Sie das [PHP PDO Tutorial] (http://net.tutsplus.com/tutorials/php/why-you-should-beusing-phps- PDO-für-Datenbank-Zugriff /).Das Übermitteln von beliebigen Daten in eine SQL-Abfrage ist leichtsinnig. – tadman

+0

Ihr echtes Problem ist jetzt, die schlechten Transaktionen zu finden und zu beheben. Wenn Sie verknüpfte Tabellen haben, müssen Sie möglicherweise direkt mit dem Kunden Kontakt aufnehmen, um herauszufinden, welche Zahlungen zu welchen Zahlungen führen. – HLGEM

Antwort

7

Ihre Zahl ist größer als das Feld in der DB kann ... Griff

4294967295 ist die größte Zahl 32 Bit halten können, ist Ihre Transaktions-ID jetzt größer als die numerische Feld kann Ihre DB halten.

+2

@ three3 geben Sie sich einen Klaps auf den Rücken für die maximale aus – citizenen

1

4294967295 ist bequem 2^32-1 - der maximale Wert für eine 32-Bit-Ganzzahl ohne Vorzeichen. Es sieht so aus, als ob die transaction_id, die du gibst, zu groß ist, also ist es überfüllt und das Verhalten von MySQL in dieser Situation ist, es auf den Maximalwert zu setzen.

Wenn Sie MySQLi verwenden, sollten Sie vorbereitete Anweisungen verwenden. Ich bin mir nicht sicher, was der Wert Ihrer Sitzungsvariablen ist, aber ich vermute, dass sie nicht abgesichert sind, so dass sie entweder maskiert werden müssen oder vorbereitete Anweisungen verwenden müssen.

0

die Daten ändern Typ des transaction_id-BIGINT

4

ausgezeichnete Arbeit in Frage, das Problem und die Berichterstattung über die Ergebnisse der Untersuchung!

4294967295 ist die größte INT, die mysql halten kann, so Transaktions-IDs höher als die gespeichert werden immer als 4294967295. Um dies zu beheben, können Sie die Spaltentyp ändern können in BIGINT: modify column transaction_id bigint

Dies sollte den Spaltentyp umwandeln unter Beibehaltung aller Ihrer Daten, aber es wäre gut, die Datenbank zuerst zu sichern, nur für den Fall!

0

Eine weitere Option ist, Ihren Autoinkrementwert der Tabelle zu betrachten. In meinem Fall war es 4294967295:/

Verwandte Themen