Mysql - Query Delete Problem

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey Leute,


    also jedes mal wenn folgender Code aufgerufen wird, wird der eintrag in der Datenbank nicht gelöscht und der ganze Server hängt sich fest.
    Damit meine ich, wenn ich irgendwelche Befehle eingebe reagiert der Server nicht mehr darauf. Das gleiche ist auch bei der Console bei Befehelen wie zb. exit.



    new query[128];
    mysql_real_escape_string(vdata[i][owner],vdata[i][owner]);
    format(query, 128, "DELETE FROM `vehicles` WHERE `owner` = '%s' AND `modleid` = '%i'", vdata[i][owner], vdata[i][modleid]);
    mysql_query(query);


    Danke im vorraus :)


    //EDIT: pawn code bearbeitet

  • Da musst du wahrscheinlich auch deinen Datenbanknamen angeben,


    werde gleich ein Beispiel reineditieren.


    Edit = Beispiel

    DELETE FROM `Datenbankname`.`Tabellename` WHERE `Tabellenname`.`Wert(Name)` = '%s'",Name);

  • Da musst du wahrscheinlich auch deinen Datenbanknamen angeben,


    werde gleich ein Beispiel reineditieren.


    Edit = Beispiel

    DELETE FROM `Datenbankname`.`Tabellename` WHERE `Tabellenname`.`Wert(Name)` = '%s'",Name);


    Kann es heute leider nicht mehr ausprobieren, aber bei anderen Querys zb Updates muss ich den Datanbankname auch nicht hinzufügen und es klappt.
    Aber trozdem vielen dank erstmal für die Hilfe ich werd es morgen ausprobieren :p


    RaPSoR Genau in dem moment wird nichts mehr im MySQL Log aufgeschrieben :/

  • Versuch es mal so:


    new query[128];
    mysql_real_escape_string(vdata[i][owner],query);
    format(query, 128, "DELETE FROM `vehicles` WHERE `owner` = '%s' AND `modleid` = '%i'", query, vdata[i][modleid]);
    mysql_query(query);


    Es kann sein, dass du nicht in den selben string escape kannst.

  • Versuch es mal so:


    new query[128];
    mysql_real_escape_string(vdata[i][owner],query);
    format(query, 128, "DELETE FROM `vehicles` WHERE `owner` = '%s' AND `modleid` = '%i'", query, vdata[i][modleid]);
    mysql_query(query);


    Es kann sein, dass du nicht in den selben string escape kannst.

    Klappt leider auch nicht konnte das noch kurz testen weil es nicht so aufwendig war, aber versuch morgen noch den Lösungsweg von [IRP]AyKut da ich leider jetzt offline muss.
    Trozdem euch allen vielen dank für die Hilfe :p


  • die Häckchen nur bei Text bzw. Zeichenfolgen


    Falsch. Die müssen bei Zahlen zwar nicht hin, sie stören aber auch nicht.


    Zahlen: Optional
    String: Pflicht



    Wie sieht es denn mit anderen queries aus? Funktionieren die? Ansonsten kann es sein, dass du gar nicht mit der Datenbank verbungen bist?


    Was passiert wenn du die vier zZeilen entfernst?

  • Wie oben schon geschrieben, meine Art und Weise sollte eig funktionieren, also ich verwende die R-38 Version und es funktioniert bei mir :) ,


    Lg


    ~ Handy


  • Alle andere Queries funktionieren einwandfrei auch mit dieser Datenbank weil ich davor eine Verbindung aufgebaue. Wenn ich die Zeilen entferne hängt der Server sich nicht auf. Das Problem ist halt ich will den Eintrag gelöscht bekommen. Achja nebenbei der ganze Code steht unter OnVehicleDeath.


    -Handy

  • Vielleicht klappt auch der ganze Query auf Grund der Rechtschreibung nicht, weil eine Spalte anders benannt ist.
    `modleid` = '%i' <- modleid? Sollte es nicht "modelid" heißen oder heißt es in der Spalte auch "modleid"?


    Versuch es mal so:
    format(query, 128, "DELETE FROM vehicles WHERE (owner='%s') AND (modleid='%d')", name, vdata[i][modleid]);


    Du hast bei "Owner" den leeren "query" eingefügt und nicht den Spielernamen, hab das mal geändert in meinem Beispiel, denn so wie vorher kann das ja auch nicht klappen. Du musst nur noch den "Name" definieren.


    Sollte es immer noch nicht gehen, baust du nach der Zeile am besten folgendes ein:
    die(mysql_error()); <- Um zu sehen ob es Fehler gibt.

    "Einen Streit im Internet gewinnen, ist wie ein Sieg bei den Paralympics. Du hast zwar gewonnen, aber du bist immer noch behindert."

  • Kannst du mal den gesamten Code zu dem Teil posten, vielleicht liegt es an was anderem.


    Hier:



    public OnVehicleDeath(vehicleid, killerid)
    {
    for(new i; i < MAX_DATA_VEHICLES; i++)
    {
    if(vdata[i][exist] == false) continue;
    if(vdata[i][data_vehicleid] == vehicleid)
    {
    for(new SLOTi; SLOTi < 500; SLOTi++)
    {
    vSlots[vdata[i][data_vehicleid]][SLOTi] = -1;
    }
    switch(vdata[i][type])
    {
    case 0: { ssinfo[GetPlayerID(vdata[i][owner])][outrentVehicle] --; }

    case 1: {
    print("Test1");
    ssinfo[GetPlayerID(vdata[i][owner])][outVehicle] --;

    new query[128];
    mysql_real_escape_string(vdata[i][owner],query);
    format(query, 128, "DELETE FROM `vehicles` WHERE `owner` = '%s' AND `modleid` = '%i'", query, vdata[i][modleid]);
    mysql_query(query);
    print("Test2");
    }
    }
    DestroyVehicle(vehicleid);
    vdata[i][exist] = false;
    break;
    }
    }
    return 1;
    }



    "modleid" wurde überall falsch geschrieben (Also auch in der Tabelle) ^^:whistling:
    "query" war nicht leer da davor "mysql_real_escape_string(vdata[i][owner],query);" kam.
    Ich hab "vdata[i][owner]" auch schon in anderen String gespeichert zb. in sich selbst und es hat nie geklappt :/
    Dein Versuch funktioniert leider bei mir auch nicht und bei mysql_error(); bekomm ich den Error das die Funktion nirgends definiert worden ist.
    Ich verwende die include und plugin von G-sTyLeZzZ ist da diese Funktion überhaupt drinnen?


    Mit freundlichen Grüßen :)


    //EDIT: Ausversehen alter pawn code drinnen gewesen ^^

  • Nur mal zum Testen ob es am DELETE liegt, mach mal das rein:


    format(query, 128, "UPDATE `vehicles` SET `owner` = '-Niemand-' WHERE `owner` = '%s' AND `modleid` = '%i'", query, vdata[i][modleid]);


    Kommt er dann durch, oder bleibt es auch hängen?



    Was wird von den prints angezeigt?


    Mach auch mal nen print hinter das format:
    print(query);
    Für beide Varianten (DELETE & UPDATE). Was wird geprintet?


  • Komisch, irgendwie kommt jetzt auch nicht mehr die Update Funktion mehr durch :pinch:
    Als erstes war die query nur 128 Zeiche lang und somit nicht lang genug für die Query.
    Da wurde alles noch geprintet und Owner nicht bearbeitet ist ja klar.
    Nun wird nur noch "Test1" geprintet.
    Andere UPDATE Querys funktionieren im Script komisch.


    CODE:

    print("Test1");
    ssinfo[GetPlayerID(vdata[i][owner])][outVehicle] --;

    new query[170],name[32];
    mysql_real_escape_string(vdata[i][owner],name);
    format(query, 170, "DELETE FROM `vehicles` WHERE `owner` = '%s' AND `modleid` = '%i'", name, vdata[i][modleid]);
    print(query);
    format(query, 170, "UPDATE `vehicles` SET `owner` = '-Niemand-' WHERE `owner` = '%s' AND `modleid` = '%i'", name, vdata[i][modleid]);
    print(query);
    mysql_query(query);
    print("Test2");

  • print("Test1");
    ssinfo[GetPlayerID(vdata[i][owner])][outVehicle] --;
    print("Test1.2");
    new query[170],name[32];
    print("Test1.3");
    mysql_real_escape_string(vdata[i][owner],name);
    print("Test1.4");
    format(query, 170, "DELETE FROM `vehicles` WHERE `owner` = '%s' AND `modleid` = '%i'", name, vdata[i][modleid]);
    print(query);
    format(query, 170, "UPDATE `vehicles` SET `owner` = '-Niemand-' WHERE `owner` = '%s' AND `modleid` = '%i'", name, vdata[i][modleid]);
    print(query);
    mysql_query(query);
    print("Test2");


    Wie weit kommt er?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen