Merkwürdige MySQL Logs

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, ich habe in meinen MySQL Logs folgendes gefunden und wollte wissen, was das Problem ist..:

    SQL
    [ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('0')
    [ERROR] cache_get_field_content_int - invalid datatype
    
    
    oder 
    [14:50:08] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Owned = 0,Locked = 0,Price = 0,PosX = 0.000000,PosY = 0.000000,PosZ = 0.000000,I' at line 1


    Hier schon mal die UPDATE server_properties_furnitures

  • for(new i=0; i < MAX_GARAGES; i++)
    {
    format(query, sizeof(query), "UPDATE "#SQL_TAG"_garages SET Owner = '%s',Owned = %d,Locked = %d,Price = %d,PosX = %f,PosY = %f,PosZ = %f,Interior = %d,UID = %d WHERE UID = '%d'",
    gInfo[i][Owner],gInfo[i][Owned],gInfo[i][Locked],gInfo[i][Price],gInfo[i][PosX],gInfo[i][PosY],gInfo[i][PosZ],gInfo[i][Interior],gInfo[i][UID],gInfo[i][UID]);
    }
    So sollte das passen. Du hattest erst den Fehler mit dem %s und am Ende hattest du ein Komma zu viel.

  • Es trat ein neuer Fehler auf, @Mencent:

    Code
    CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE UID = '0'' at line 1
     CMySQLResult::GetRowDataByName() - invalid row index ('0')
     cache_get_field_content_int - invalid datatype
  • Das hat aber soweit nichts mehr mit dem Code zu tun.
    Weißt du woher der Fehler kommt?

  • Wo lässt du das ganze überhaupt aufrufen?


    Außerdem:
    CMySQLResult::GetRowDataByName() - invalid row index ('0')
    cache_get_field_content_int - invalid datatype
    Das kann nichts damit zu tun haben, denn du hast in dem Code nirgends cache_get_field_content_int

  • Ich Idiot, gerade germerkt, dass ich auch noch was vergessen habe... :D


  • public LoadGarages()
    {
    //garageCount = 1;
    new rows, fields;
    cache_get_data(rows, fields);
    for(new i = 0; i <= rows; i++)
    {
    new id = getFreeGarageID();
    cache_get_field_content(i,"Owner",gInfo[id][Owner],MySqlConnection,24);
    gInfo[id][Owned] = cache_get_field_content_int(i, "Owned", MySqlConnection);
    gInfo[id][Locked] = cache_get_field_content_int(i, "Locked", MySqlConnection);
    gInfo[id][Price] = cache_get_field_content_int(i, "Price", MySqlConnection);
    gInfo[id][PosX] = cache_get_field_content_float(i, "PosX", MySqlConnection);
    gInfo[id][PosY] = cache_get_field_content_float(i, "PosY", MySqlConnection);
    gInfo[id][PosZ] = cache_get_field_content_float(i, "PosZ", MySqlConnection);
    gInfo[id][Interior] = cache_get_field_content_int(i, "Interior", MySqlConnection);
    gInfo[id][UID] = cache_get_field_content_int(i, "UID", MySqlConnection);
    UpdateGarageInfo(id);
    garageCount++;
    }
    printf("SERVER » Garagen geladen %d/%i",garageCount,MAX_GARAGES);
    return 1;
    }


    getFreeGarageID()
    {
    for(new i;i<sizeof gInfo;i++)
    {
    if(!strlen(gInfo[i][Owner]))return i;
    }
    return -1;
    }
    So.
    Du wolltest Floats mit cache_get_field_content_int auslesen, dafür brauchst du aber cache_get_field_content_float ^^

  • Rein von der Logik ist der Teil am eine deines SQL Statements auch Quatsch:

    Zitat

    ,UID = %d WHERE UID = '%d'


    Heisst: Mach bei dem User, der die User ID 10 hat, den Wert der User ID auf 10.
    Mach keinen Sinn. Denn der User mit der User ID 10 hat bereits den Wert der User ID auf 10 :wacko:.


    Ansonsten solltest du die Länge des Debug Ausgabe im MySQL Plugin erhöhen oder direkt den String query per print ausgeben und hier posten.


    Zitat

    for(new i = 0; i <= rows; i++)


    Ist übrigens mit <= auch nicht richtig.
    Angenommen du hast 1 Zeile, gehst du mir der schleife i = 0, i <= 1 gleich 2x durch. Mit dem Wert 0 und dem Wert 1.


    //Edit:
    Wenn UID wirklich dein Primärschlüssel ist,ist der Name auch schlecht gewählt. UID würde ich als UserID lesen. Wenn es um Garagen geht, würde ich wahrscheinlich GaragenID nehmen oder nur ID.

    Einmal editiert, zuletzt von Goldkiller ()