Sehr komischer MySQL Bug

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,
    hänge schon seit Tagen an einem für mich unerklärlichem Bug. Es geht darum, dass alle Fahrzeuge aus der Datenbank ausgelesen und erstellt werden.
    Nur das Problem ist, das Fahrzeug ist IMMER das Model 45. Ich habe das ganze mal debuggt und kann es immer noch nicht ganz verstehen.


    Als erstes kommt meine Query, dann lese ich mit einer Schleife die Daten aus. :
    mysql_query(dbhandle,"SELECT * FROM `server_fleet`");
    mysql_store_result();
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    for(new i = 0; i != num_rows; i++)
    {
    new id = GetFreeServerFleetID();
    printf("Slot ID: %i",id);
    Server_Fleet[id][Fleet_ModelID] = cache_get_field_content_int(i,"ModelID",dbhandle);
    printf("ModelID: %i",Server_Fleet[id][Fleet_ModelID]);
    Server_Fleet[id][Fleet_ID] = CreateVehicleEx(Server_Fleet[id][Fleet_ModelID],Server_Fleet[id][Fleet_X],Server_Fleet[id][Fleet_Y],Server_Fleet[id][Fleet_Z],Server_Fleet[id] [Fleet_Rotation],Server_Fleet[id][Fleet_Color1],Server_Fleet[id][Fleet_Color2],5000);
    printf("Fahrzeug sollte erstellt sein");
    printf("ModelID: %i",Server_Fleet[id][Fleet_ModelID]);
    }


    Ich habe jetzt mal aller unwichtigen Sachen weggelassen, da alles außer die ModelID ja funktioniert.
    Beim ersten print stimmt die ModelID noch, aber beim zweiten ist sie plötzlich 45 ?
    Ich habe den ganzen Gamemode durchsucht. Nirgends wird sonst an der ModelID herumgespielt.

  • @H4ard B4ase
    Doch ist er, weil ich da nur noch die Position des Fahrzeugs abfrage und da alles funktioniert.
    Kaliber
    Was meinst du ? Ich benutze schon immer das gleiche Plugin :D Und was ich gemacht habe, solllte doch funktionieren ? Ich habe das schon oft so gemacht und es hat immer funktioniert.

  • Und was ich gemacht habe, solllte doch funktionieren ?


    Nein, wenn du mit cache Funktionen arbeitest, musst du auch entweder mysql_function_query oder mysql_pquery oder mysql_tquery verwenden...aber nicht nur mysql_query!


    Mit mysql_query und mysql_store_result kannst du nicht auf cache Funktionen zugreifen, sondern hast dann halt direkt ein result vorliegen.


    Wie gesagt, schau dir doch einfach die Tutorials an, ist ja nicht soviel.


    mfg. :rolleyes:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Wenn das irgendwo funktioniert hat war das Zufall. ;)


    Besser ist es so:


    mysql_tquery(dbhandle,"SELECT * FROM `server_fleet`", "LoadVehs", "");


    forward LoadVehs();
    public LoadVehs()
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    for(new i = 0; i < num_rows; i++)
    {
    new id = GetFreeServerFleetID();
    printf("Slot ID: %i",id);
    Server_Fleet[id][Fleet_ModelID] = cache_get_field_content_int(i,"ModelID",dbhandle);
    printf("ModelID: %i",Server_Fleet[id][Fleet_ModelID]);
    Server_Fleet[id][Fleet_ID] = CreateVehicleEx(Server_Fleet[id][Fleet_ModelID],Server_Fleet[id][Fleet_X],Server_Fleet[id][Fleet_Y],Server_Fleet[id][Fleet_Z],Server_Fleet[id] [Fleet_Rotation],Server_Fleet[id][Fleet_Color1],Server_Fleet[id][Fleet_Color2],5000);
    printf("Fahrzeug sollte erstellt sein");
    printf("ModelID: %i",Server_Fleet[id][Fleet_ModelID]);
    }
    return 1;
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Das hat nicht nur einmal funktioniert, sonder immer bis auf dieses mal. Und es lädt ja sonst auch alle Werte korrekt.
    Ich dachte immer ich kann mysql_query benutzen, solange ich noch alles in der gleichen Funktion abfrage und wenn ich es in einem extra Callback will, brauche ich mysql_function_query.
    Und wie gesagt, bisher hat es immer funktioniert, auch beim Laden anderer Fahrzeuge.
    Trotzdem danke 8)
    *edit* Der Bug ist trotzdem immernoch da.

    Einmal editiert, zuletzt von Oskaar1994 ()

  • Wie gesagt funktioniert leider trotzdem nicht. Genau wie vorher stimmt kurz nach der Abfrage der Wert noch, aber wie durch Zauberhand ist er später geändert.
    Hier trotzdem mal die betroffenen Zeilen der Log:
    [19:11:56] [DEBUG] mysql_query - connection: 1, query: "SELECT * FROM `server_fleet`", use_cache: true
    [19:11:56] [DEBUG] CMySQLQuery::Execute - starting query execution
    [19:11:56] [DEBUG] CMySQLQuery::Execute - query was successfully executed within 89.892 milliseconds
    [19:11:56] [DEBUG] CMySQLResult::CMySQLResult() - constructor called
    [19:11:56] [DEBUG] CMySQLHandle::SaveActiveResult - cache saved (id: 8)
    [19:11:56] [DEBUG] cache_get_data - connection: 1
    [19:11:56] [DEBUG] cache_get_field_content_int - row: 0, field_name: "ID", connection: 1
    [19:11:56] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "ID", data: "1000"
    [19:11:56] [DEBUG] cache_get_field_content_int - row: 0, field_name: "ModelID", connection: 1
    [19:11:56] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "ModelID", data: "592"
    [19:11:56] [DEBUG] cache_get_field_content - row: 0, field_name: "Tailnumber", connection: 1, max_len: 10
    [19:11:56] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "Tailnumber", data: "CT-1000"
    [19:11:56] [DEBUG] cache_get_field_content_float - row: 0, field_name: "PosX", connection: 1
    [19:11:56] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "PosX", data: "1344.29"
    [19:11:56] [DEBUG] cache_get_field_content_float - row: 0, field_name: "PosY", connection: 1
    [19:11:56] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "PosY", data: "1329.43"
    [19:11:56] [DEBUG] cache_get_field_content_float - row: 0, field_name: "PosZ", connection: 1
    [19:11:56] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "PosZ", data: "12.0158"
    [19:11:56] [DEBUG] cache_get_field_content_float - row: 0, field_name: "Rotation", connection: 1
    [19:11:56] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "Rotation", data: "355.033"
    [19:11:56] [DEBUG] cache_get_field_content_int - row: 0, field_name: "Color1", connection: 1
    [19:11:56] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "Color1", data: "1"
    [19:11:56] [DEBUG] cache_get_field_content_int - row: 0, field_name: "Color2", connection: 1
    [19:11:56] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "Color2", data: "1"
    [19:11:56] [DEBUG] cache_get_field_content_int - row: 0, field_name: "Type", connection: 1
    [19:11:56] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "Type", data: "0"
    *edit* Habe den Fehler gefunden. Ich habe ausversehen bei einer anderen Abfrage in meinem Fahrzeug Array einen Integer mit einem String formatiert :whistling: Frage mich trotzdem wieso dann die ModelID geändert wurde (obwohl die nichtmal betroffen war), aber alle anderen Werte gleich geblieben sind :D


    Trotzdem danke, dass ihr euch Zeit für mein Problem genommen habt :thumbup:

    2 Mal editiert, zuletzt von Oskaar1994 ()

  • Ich verstehe nicht was du meinst, mit "Genau wie vorher stimmt kurz nach der Abfrage der Wert noch, aber wie durch Zauberhand ist er später geändert.".


    Woran siehst du, dass der Wert geändert ist? Ich sehe in dem Log nämlich nichts.
    Umd stimmen die prints eigentlich?



    EDIT:
    Oskaar1994:

    Zitat

    Frage mich trotzdem wieso dann die ModelID geändert wurde (obwohl die nichtmal betroffen war), aber alle anderen Werte gleich geblieben sind


    Das liegt daran, weil die Werte in einem Array alle hintereinander stehen (anschaulich gesagt). Wenn du in einen Integer einen String rein packst, dann ist das natürlich zu viel, somit werden die Teile dahinter auf entsprechender Länge überschrieben.


    Sehr gut, dass du den Fehler selbst entdeckt hast. :thumbup:

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()