anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Do 17 Jul, 2025 20:11

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Datenbank spinnt
BeitragVerfasst: Di 17 Okt, 2006 21:47 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mi 13 Sep, 2006 08:18
Beiträge: 171
Wohnort: Dortmund
Geschlecht: Männlich
LoGD: http://djcybo.de/logd/source.php
Skype: djcybo
Hi,
also mein phpAdmin schwohl zu spinnen oder so... auf jeden fall habe ich folgendes problem: Ein User kämpft und findet ein item, dies wird in der datenbank eingetragen, noch ein user findet ein item und folgender fehler kommt
$this->bbcode_second_pass_code('', 'INSERT INTO items(name,class,owner,gold,gems,value2,hvalue,description) VALUES ('Ksienmrofrucht','Beute','42','500','1','8','3','Mysteriöse Frucht aus den tiefen Schluchten des Elindrischen Gebirgszuges')

Duplicate entry '4294967295' for key 1') kurze zeit findet ein anderer user wieder ein item, mit ähnlichem/gleichem fehler$this->bbcode_second_pass_code('', 'INSERT INTO items(name,class,owner,gold,gems,value1,value2,hvalue,description,buff) VALUES ('Magiebarriere','Zauber',42,81.8181818182,0,5,10,0,'Dieser Zauber kann 10x verwendet werden und blockt jeweils einen Angriff deines Gegners komplett ab. (gebraucht)','a:5:{s:4:\"name\";s:13:\"Magiebarriere\";s:8:\"roundmsg\";s:94:\"`VEin hellblauer Energieschild blitzt auf und blockt den Angriff deines Gegners komplett ab.`0\";s:6:\"rounds\";s:1:\"1\";s:12:\"badguyatkmod\";s:1:\"0\";s:8:\"activate\";s:7:\"defense\";}')

Duplicate entry '4294967295' for key 1')
ich habe hier ein paar inserts aus dem forum genommen und dann mal irgendwelche zahlen eingetippt um items zu dublizieren und naja die zahlen wurden halt immer größer, ich habe massig item-IDs die NICHT belegt sind, wie/wo kann ich einstellen, dass in der DB einträge in einer freien zeile eingetragen werden? oder anders: woher weiss die DB, dass das letztgefundene item die ID "4294967295" hat? ich will die zahl ändern...
hilfe bitte dringend schnell!

_________________
10 Gründe, die für Linux sprechen:
Linux ist:
01. stabil
02. schnell
03. sicher
04. flexibel
05. freie Software
06. ressourcenschonend
07. sehr gut dokumentiert
08. beliebt
09. kompatibel zu Windows
10. sexy


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 17 Okt, 2006 22:00 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mi 13 Sep, 2006 08:18
Beiträge: 171
Wohnort: Dortmund
Geschlecht: Männlich
LoGD: http://djcybo.de/logd/source.php
Skype: djcybo
Ich hab's nun selsbt getestet und wieder folgender Fehler:
$this->bbcode_second_pass_code('', 'INSERT INTO items(name,class,owner,gold,gems,value1,value2,hvalue,description,buff) VALUES ('Raserei','Zauber',3,500,0,2,2,3,'Dies ist mehr eine Kampftechnik, als es mit Magie zu tun hat. Dein Angriffswert steigt, deine Verteidigung leidet allerdings unter dieser blinden Raserei. Kann 3 Tage lang 2x eingesetzt werden. (gebraucht)','a:7:{s:4:\"name\";s:7:\"Raserei\";s:8:\"roundmsg\";s:70:\"`qDu führst in blinder Raserei einen besonders heftigen Angriff aus.`0\";s:6:\"rounds\";s:1:\"1\";s:6:\"atkmod\";s:3:\"1.1\";s:6:\"defmod\";s:3:\"0.9\";s:12:\"badguydefmod\";s:3:\"0.9\";s:8:\"activate\";s:10:\"roundstart\";}')

Duplicate entry '4294967295' for key 1')
Woher weiss das spiel, oder die datenbank, dass der eintrag genau mit der zahl dort weitergeht?

_________________
10 Gründe, die für Linux sprechen:
Linux ist:
01. stabil
02. schnell
03. sicher
04. flexibel
05. freie Software
06. ressourcenschonend
07. sehr gut dokumentiert
08. beliebt
09. kompatibel zu Windows
10. sexy


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 17 Okt, 2006 22:07 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
Die Fehlermeldung weisst dich darauf hin das dieser Eintrag bereits vorhanden ist. Bzw. die ID bezüglich des Inserts...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 17 Okt, 2006 22:13 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mi 13 Sep, 2006 08:18
Beiträge: 171
Wohnort: Dortmund
Geschlecht: Männlich
LoGD: http://djcybo.de/logd/source.php
Skype: djcybo
Ja das weiss ich, ich habe die tabelle jetzt umgeschrieben!
wo kann ich ) AUTO_INCREMENT=4294967295 ; ändern? daran lag es nämlich!

edit: schon gut, habe es unter "operationen" gefunden!

_________________
10 Gründe, die für Linux sprechen:
Linux ist:
01. stabil
02. schnell
03. sicher
04. flexibel
05. freie Software
06. ressourcenschonend
07. sehr gut dokumentiert
08. beliebt
09. kompatibel zu Windows
10. sexy


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 17 Okt, 2006 22:44 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
Die Antwort ist in diesem Falle gar nicht so wichtig, um dem problem auf die Schliche zu kommen - viel wichtiger ist folgende Frage: Was ist ((2^32)*2)-1
[klammern sind Mathematisch unnötig..ich weiß]
1) Die mathematische Lösung ist: 4294967295
2) (und viel wichtiger) Es ist der höchste Speicherbare wert bei einem 32Bit Integer mit Unsigned-Deklaration, also dem Feldtyp, der bei den Items die IDs verwaltet.

Was bedeutet das jetzt genau?
Dein LotgD läuft wahrscheinlich schon eine Weile und du hast eventuell auch einige User, die im laufe der Zeit einige Items bekommen haben.. und nach einer weile ist eben auch dieser unglaublich hohe wert erreicht, Die Liste der Items ist soweit voll (sehr wahrscheinlich gibt es unmengen von Lücken dazwischen, aber so arbeitet die DB nun mal, das wichtigste ist der höchste wert).

Ok, und wass soll man jetzt machen?
Entweder jedes Mal wenn soetwas auftritt die Items schön durchordnen (geht per PHP & MySQL eingermaßen flink) und den Auto-Increment-Wert wieder runtersetzen oder erstmal den Speicherbereich für den Key hochsetzen. Denn bei einem Key von 64 Bit inclusive Unsigned hätten wir dann nicht mehr nur 2^32*2-1 sondern wunderbare 2^64*2-1 und das ist schon eine Zahl, die sich vereinfacht mit 3,6 * 10^19 audrücken lässt. Also genug bis zum Sanktnimmerleinstag!

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi 18 Okt, 2006 05:10 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mi 13 Sep, 2006 08:18
Beiträge: 171
Wohnort: Dortmund
Geschlecht: Männlich
LoGD: http://djcybo.de/logd/source.php
Skype: djcybo
Ich hab's mir gestern Abend im Bett ausgerechnet (als ich das schon erledigt hatte...) INT^11 müsste eigentlich auf die gleiche Zahl kommen!
Aber rotzdem danke, für den Hinweis!

_________________
10 Gründe, die für Linux sprechen:
Linux ist:
01. stabil
02. schnell
03. sicher
04. flexibel
05. freie Software
06. ressourcenschonend
07. sehr gut dokumentiert
08. beliebt
09. kompatibel zu Windows
10. sexy


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi 18 Okt, 2006 07:41 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 24 Okt, 2005 23:20
Beiträge: 180
Geschlecht: Männlich
LoGD: http://logd.wyrmslayer.de
Auric hat geschrieben:
...Entweder jedes Mal wenn soetwas auftritt die Items schön durchordnen (geht per PHP & MySQL eingermaßen flink) und den Auto-Increment-Wert wieder runtersetzen...


Könntest du einem PHP/MySQL Laien wie mir in kurzen verständlichen Sätzen erklären, wie das geht? ;)

_________________
YoM hat geschrieben:
LÖLz... ne, dafür ham wir unsere Mods, als Admins dürfen wir ehrlich sein. *gg*
---Original Message---
bist du eigentlich zum freundlich sein verpflichtet?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi 18 Okt, 2006 11:29 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
Einfach Variante:
$this->bbcode_second_pass_code('', 'ALTER TABLE `items` CHANGE `id` `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ')

oder ansonsten ... hm, das vernünftig hinzuordnen ist nicht ganz einfach, da die ersten Items Ja Prototypen sind usw... Ich schaue mal, ob ich mi da nicht was zu basteln kann... wenn es funzt, poste ich es dann hier.

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi 18 Okt, 2006 15:11 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mi 13 Sep, 2006 08:18
Beiträge: 171
Wohnort: Dortmund
Geschlecht: Männlich
LoGD: http://djcybo.de/logd/source.php
Skype: djcybo
Das wäre gut, das nimmt einem dann eine Menge Arbeit ab! Gut die 20, 25 Datensätze, die ich da gestern Abend hatte, waren nicht so schlimm, da mal eben die ID zu ändern, aber wenn das irgendwann mal mehr sind, wäre swas mit sicherheit äusserst hilfreich!

_________________
10 Gründe, die für Linux sprechen:
Linux ist:
01. stabil
02. schnell
03. sicher
04. flexibel
05. freie Software
06. ressourcenschonend
07. sehr gut dokumentiert
08. beliebt
09. kompatibel zu Windows
10. sexy


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi 18 Okt, 2006 22:58 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
So, hier hätten wir dann mal eine erste Version des Anordners..
aber auf jeden fall vorher ein Backup anlegen, ich übernehme keinerlei Haftung für verlorene Daten soder sonstwas!
[php]// VORHER UNBEDING EIN BACKUP ANLEGEN!!!
$offset = 50; // Wichtig - hier bitte mindestens den letzten .Prot eintrag oder hexenfluch eintragen!

$sql = "SELECT * FROM items WHERE id > $offset";
$result = db_query($sql);
$max = db_num_rows($result);

db_query("DELETE FROM items WHERE id > $offset");
db_query("ALTER TABLE `items` AUTO_INCREMENT=".$max);

for($i=0;$i<$max;$i++) {
$row = db_fetch_assoc($result);
$sql = "INSERT INTO items(id,name,class,owner,value1,value2,gold,gems,description,hvalue,buff) VALUES(
".($i+$offset).",'".$row['name']."','".$row['class']."',".$row['value1'].",".$row['value2'].",
".$row['gold'].",".$row['gems'].",'".$row['description']."',".$row['hvalue'].",'".$row['buff'].")";
db_query($sql);
}[/php]

_________________
Mehr oder minder inaktiv


Zuletzt geändert von Auric am Do 19 Okt, 2006 11:29, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do 19 Okt, 2006 05:10 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mi 13 Sep, 2006 08:18
Beiträge: 171
Wohnort: Dortmund
Geschlecht: Männlich
LoGD: http://djcybo.de/logd/source.php
Skype: djcybo
Das sieht doch schonmal ganz gut aus, aber muss man dann immer nach jedem neuen Eintrag das Offset in dieser Anweisung ändern? Oder sagt der das der DB nur ein einziges Mal?

_________________
10 Gründe, die für Linux sprechen:
Linux ist:
01. stabil
02. schnell
03. sicher
04. flexibel
05. freie Software
06. ressourcenschonend
07. sehr gut dokumentiert
08. beliebt
09. kompatibel zu Windows
10. sexy


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do 19 Okt, 2006 08:46 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 24 Okt, 2005 23:20
Beiträge: 180
Geschlecht: Männlich
LoGD: http://logd.wyrmslayer.de
$sql = "INSERT INTO news

soll doch sicher heißen

$sql = "INSERT INTO items

oder unterlieg ich da nem Irrtum?

ansonsten schaut das echt klasse aus. ich werd das ma ausprobieren :)

_________________
YoM hat geschrieben:
LÖLz... ne, dafür ham wir unsere Mods, als Admins dürfen wir ehrlich sein. *gg*
---Original Message---
bist du eigentlich zum freundlich sein verpflichtet?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do 19 Okt, 2006 11:31 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
Jaaaah, der bill hat da nicht ganz unrecht.. wie komme ich nur auf News :???:

Na ja, das Script müsstest du immer nur dann aufrufen, wenn dein ganz oben beschriebener Fehler auftaucht, also nicht allzu häufig.

Wenn du allerdings sehr viele Items schon drinne hast, kann das ganze auch ne weie dauern, da die einzelnen Einträge ja ersteml wieder einsortert werden wollen..

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum