+ Antworten
Ergebnis 1 bis 3 von 3

Thema: INSERT INTO ... ON DUPLICATE KEY UPDATE ... schlägt fehl

  1. #1
    User Floppy Disc Themenstarter
    Avatar von Sen-Mithrarin
    Registriert seit
    26.10.2013
    Fachbeiträge
    756
    Genannt
    63 Post(s)
    server-spec:
    OS: openSuse 13.2-tumbleweed
    db-server: mysql-opensuse v.5.6.28

    Mahlzeit - ich auch mal hier - WTF?

    Tja, bin ja begeisterter Half-Life-fanboi und des Mods Sven Co-Op. Da ich selbst einen root habe und dort natürlich einen Server drauf laufen lasse wollte ich, nach dem ich nun lange genug Stabilitätstests durchgeführt habe den bekannten XP-Mod mit einbinden - und prompt gleich beim ersten Test knall ich auf die Nase.

    Das DB-Backend nutzt zwei Queries:

    SQL Code:
    1. #define QUERY_SELECT_SKILLS "SELECT `xp`, `playerlevel`, `skillpoints`, `medals`, `health`, `armor`, `rhealth`, `rarmor`, `rammo`, `gravity`, `speed`, `dist`, `dodge` FROM `%s` WHERE %s"
    2. #define QUERY_UPDATE_SKILLS "INSERT INTO %s (uniqueid) VALUES ('%s') ON DUPLICATE KEY UPDATE authid ='%s',nick='%s',ip='%s',xp='%d',playerlevel='%d',skillpoints='%d',medals='%d',health='%d',armor='%d',rhealth='%d',rarmor='%d',rammo='%d',gravity='%d',speed='%d',dist='%d',dodge='%d'"

    Und das meint mein MySQL-Server zum insert:

    SQL Code:
    1. INSERT INTO scxpm_stats (uniqueid) VALUES ('STEAM_0:0:17251289') ON DUPLICATE KEY UPDATE authid ='STEAM_0:0:17251289',nick='Sen-Mithrarin',ip='213.211.229.14',xp='0',playerlevel='0',skillpoints='0',medals='4',health='0',armor='0',rhealth='0',rarmor='0',rammo='0',gravity='0',speed='0',dist='0',dodge='0'
    -> 1.Unerkanntes Schlüsselwort. (near "KEY" at position 78) (mit phpMyAdmin 4.5.5.1)

    Ich hab schon in der Doc zu meiner Server-Version nachgelesen - und mit copy'n'paste um Tippfehler auszuschließen. Ich hab auch versucht nach dem Fehler zu googlen - aber leider ist mein Such-String scheinbar zu komplex für Google und es kommen leider keine brauchbaren Ergebnisse (bin garantiert einfach mal wieder zu blöd n halbwegs sinnvollen Such-String einzugeben).

    Da laut Doc das Command unterstützt werden müsste - mein Server aber meldet dass er es scheinbar nicht kennt - wundere ich mich halt woran es liegen könnte.


    //ps - neues anti-spam-plugin? mir wird gerade unten neben dem save-button n hinweis-text angezeigt ~ denke liegt wohl dran weil ich erste mal von meinem rechner über meine neue IP post (wobei - hab ich auch schon übers handy ~ komisch)


    -- EDIT

    Sehr merkwürdig: führe ich die Query vom cli aus bekomme ich plötzlich:
    ERROR 1364 (HY000): Field 'authid' doesn't have a default value
    Was geht denn bitte hier ab? - Ich versuchs mal mit default-values.

    btw: Ja, den Fehler mit dem Leerzeichen zwischen authid und = hab ich bereits gefixt - daran liegts leider nicht.
    Geändert von Sen-Mithrarin (06.04.2016 um 19:32 Uhr)
    Biskuit ... das is' glaub ich fast so 'ne Suppe
    ein vergruseltes 2016 und so ...
    "Darf ich dir noch was anbieten?" - "Du meinst außer Steaks, Bier, Kippen und nen Lapdance?"

  2. #2
    Global Moderator Viertel Gigabyte Avatar von SlaterB
    Registriert seit
    06.08.2008
    Fachbeiträge
    2.711
    Genannt
    286 Post(s)
    die zweite Fehlermeldung wäre ja noch normal wenn du
    SQL Code:
    1. INSERT INTO scxpm_stats (uniqueid) VALUES ('STEAM_0:0:17251289')
    für sich ausführst, wie sollen da die anderen Felder für den neuen Eintrag belegt werden?
    authid ist doch dann sicher auch NON NULL?
    Hansa wird Meister

  3. #3
    User Floppy Disc Themenstarter
    Avatar von Sen-Mithrarin
    Registriert seit
    26.10.2013
    Fachbeiträge
    756
    Genannt
    63 Post(s)
    Ja, wollte gerade noch die Table an sich posten - warst n bissl schneller:
    SQL Code:
    1. CREATE TABLE IF NOT EXISTS `scxpm_stats` (
    2.   `id` int(11) NOT NULL auto_increment,
    3.   `uniqueid` varchar(50) NOT NULL,
    4.   `authid` varchar(24) NOT NULL,
    5.   `ip` varchar(24) NOT NULL,
    6.   `nick` varchar(50) NOT NULL,
    7.   `xp` bigint(20) NOT NULL default '0',
    8.   `playerlevel` int(11) NOT NULL default '0',
    9.   `skillpoints` int(11) NOT NULL default '0',
    10.   `medals` tinyint(4) NOT NULL default '4',
    11.   `health` int(11) NOT NULL default '0',
    12.   `armor` int(11) NOT NULL default '0',
    13.   `rhealth` int(11) NOT NULL default '0',
    14.   `rarmor` int(11) NOT NULL default '0',
    15.   `rammo` int(11) NOT NULL default '0',
    16.   `gravity` int(11) NOT NULL default '0',
    17.   `speed` int(11) NOT NULL default '0',
    18.   `dist` int(11) NOT NULL default '0',
    19.   `dodge` int(11) NOT NULL default '0',
    20.   PRIMARY KEY  (`id`),
    21.   UNIQUE KEY `uniqueid` (`uniqueid`)
    Meinste daran liegts dass halt kein default vorhanden ist? Werd ich mal testen.

    *** Edit ***

    Hab mal die Table um folgende defaults erweitert:
    SQL Code:
    1. CREATE TABLE IF NOT EXISTS `scxpm_stats` (
    2.   `id` int(11) NOT NULL auto_increment,
    3.   `uniqueid` varchar(50) NOT NULL default 'ID/IP/Nick',
    4.   `authid` varchar(24) NOT NULL default 'STEAM_invalid',
    5.   `ip` varchar(24) NOT NULL default '000.000.000.000',
    6.   `nick` varchar(50) NOT NULL default '~',
    7.   `xp` bigint(20) NOT NULL default '0',
    8.   `playerlevel` int(11) NOT NULL default '0',
    9.   `skillpoints` int(11) NOT NULL default '0',
    10.   `medals` tinyint(4) NOT NULL default '4',
    11.   `health` int(11) NOT NULL default '0',
    12.   `armor` int(11) NOT NULL default '0',
    13.   `rhealth` int(11) NOT NULL default '0',
    14.   `rarmor` int(11) NOT NULL default '0',
    15.   `rammo` int(11) NOT NULL default '0',
    16.   `gravity` int(11) NOT NULL default '0',
    17.   `speed` int(11) NOT NULL default '0',
    18.   `dist` int(11) NOT NULL default '0',
    19.   `dodge` int(11) NOT NULL default '0',
    20.   PRIMARY KEY  (`id`),
    21.   UNIQUE KEY `uniqueid` (`uniqueid`)
    Jetzt funzt es ohne Probleme. Danke für den Hint mit dem fehlenden default (wer auch immer den code gebastelt hat muss entweder kein Test gemacht haben oder hatte 'n merkwürdiges DB-setup).

    ~ solved
    Biskuit ... das is' glaub ich fast so 'ne Suppe
    ein vergruseltes 2016 und so ...
    "Darf ich dir noch was anbieten?" - "Du meinst außer Steaks, Bier, Kippen und nen Lapdance?"

+ Antworten Thema als "offen" markieren

Direkt antworten Direkt antworten

In welcher Stadt steht der Eiffelturm?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Verbindung mit MySQL schlägt fehl
    Von Andy16823 im Forum Programmierung
    Antworten: 8
    Letzter Beitrag: 28.08.2013, 10:18
  2. Insert Username into Database
    Von Movementroboter im Forum Allgemeine Themen
    Antworten: 6
    Letzter Beitrag: 16.08.2013, 15:34
  3. Segfault, vector, insert
    Von Evgeni im Forum C/C++ - Forum
    Antworten: 4
    Letzter Beitrag: 29.01.2011, 18:42
  4. Working with the INSERT statement in SQL Server
    Von RSS Reader im Forum simple-talk - category SQL
    Antworten: 0
    Letzter Beitrag: 02.10.2010, 00:55
  5. C- duplicate case value
    Von Evgeni im Forum C/C++ - Forum
    Antworten: 13
    Letzter Beitrag: 27.11.2009, 19:21

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •