MySQL GetFloat 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
  • Hallo,
    ich arbeite seit einiger zeit mit dem MySQL Pugin von StrickenKid, aber hier bin ich am verzweifeln.
    Ich habe einen MySQL GetFloat befehl geschrieben, dieser funktioniert aber nicht richtig.


    Hier der Befehl:


    stock Float:MySQL_GetFloat(Was[],Tabelle[],Wo[],Ist[])
    {
    mysql_real_escape_string(Was,Was);
    mysql_real_escape_string(Tabelle,Tabelle);
    mysql_real_escape_string(Wo,Wo);
    mysql_real_escape_string(Ist,Ist);
    new Query[512], Float:ergebnis;
    format(Query,sizeof(Query),"SELECT %s FROM %s WHERE %s='%s'",Was,Tabelle,Wo,Ist);
    mysql_query(Query);
    mysql_store_result();
    ergebnis = mysql_fetch_float();
    mysql_free_result();
    return ergebnis;
    }


    Ein forward habe ich auch, und in der mysql_log.txt steht das mysql_fetch_float mit dem richtigen ergebnis ausgeführt wurde aber meine Funktion gibt mir kein ergebnis zurück.


    Bitte um Hilfe
    Kilian

  • Ich muss das jetzt einfach sagen, auch wenn es Dir jetzt nicht bei diesem Problem hilft: Lass die Finger von so etwas. Überleg doch mal:
    __
    Angenommen Du hast 100 Felder in Deiner Usertabelle und machst meinetwegen alle 15 Minuten einen Save aller verbunden Spieler und deren aktueller Informationen. Dann updatest Du (wir gehen jetzt mal von 100 Spielern gleichzeitig auf dem Server aus) alle Spielerdaten. Jetzt kannst Du mal 100 x 100 rechnen und dann ausrechnen, wie viele Querys Du an den MySQL Server sendest... Das ist Folter für den Server und auf Deinem GameServer laggts dann auch mal für kurze Zeit heftig. Pack lieber alles in einen Query!

  • Hier eine Test Funktion bei der aus auch nicht funktioniert:


    if (strcmp("/float", cmdtext, true, 10) == 0)
    {
    new str1[256], Float:float;
    float = MySQL_GetFloat1("PosZ","Autohäuser","ID","1")
    format(str1,sizeof(str1),"Das Ergebnis: %f",float);
    SendClientMessage(playerid,grün,str1);
    return 1;
    }

  • fuktioniert auch so nicht:


    if (strcmp("/float", cmdtext, true, 10) == 0)
    {
    new str1[256], Float:meineposition;
    meineposition = MySQL_GetFloat1("PosZ","Autohäuser","ID","1"); //Die 1 hinter dem MySQL_GetFloat ist nur für test zwecke
    format(str1,sizeof(str1),"Das Ergebnis: %f",meineposition);
    SendClientMessage(playerid,grün,str1);
    return 1;
    }

  • Poste bitte die Funktion "MySQL_GetFloat1" wenn du die nutzt.
    Poste bitte was dir die Nachricht ausgibt, wenn du den Test Befehl machst.
    Poste bitte was im Server Log steht, wenn du den MySQL Debug an machst und den Befehl ausführst.

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


    if (strcmp("/float", cmdtext, true, 10) == 0)
    {
    new str1[256], Float:meineposition;
    meineposition = MySQL_GetFloat1("PosZ","Autohäuser","ID","1");
    format(str1,sizeof(str1),"Das Ergebnis: %f",meineposition);
    SendClientMessage(playerid,grün,str1);
    return 1;
    }


    Hier die Funktion:


    stock Float:MySQL_GetFloat1(Was[],Tabelle[],Wo1[],Ist1[])
    {
    mysql_real_escape_string(Was,Was);
    mysql_real_escape_string(Tabelle,Tabelle);
    mysql_real_escape_string(Wo1,Wo1);
    mysql_real_escape_string(Ist1,Ist1);
    new Query[512], Float:ergebnis;
    format(Query,sizeof(Query),"SELECT %s FROM %s WHERE %s='%s'",Was,Tabelle,Wo1,Ist1);
    mysql_query(Query);
    mysql_store_result();
    ergebnis = mysql_fetch_float();
    printf("ergebnis: %f",ergebnis);
    printf("Float: %f",mysql_fetch_float());
    mysql_free_result();
    return ergebnis;
    }


    Ingame bekomm ich nach dem tset Befegl das Ergebnis: -0.000000


    Und in der server_log.txt steht nicht relevantes.


    und der Inhalt zu der Query aus der mysql_log.txt ist folgender:


    [Tue Jul 29 21:34:05 2014] Function: mysql_real_esacpe_string executed: "PosZ" with result: "PosZ".
    [Tue Jul 29 21:34:05 2014] Function: mysql_real_esacpe_string executed: "Autohäuser" with result: "Autohäuser".
    [Tue Jul 29 21:34:05 2014] Function: mysql_real_esacpe_string executed: "ID" with result: "ID".
    [Tue Jul 29 21:34:05 2014] Function: mysql_real_esacpe_string executed: "1" with result: "1".
    [Tue Jul 29 21:34:05 2014] Function: mysql_query executed: "SELECT PosZ FROM Autohäuser WHERE ID='1'" with result: "0".
    [Tue Jul 29 21:34:05 2014] Function: mysql_store_result executed with result: "1"
    [Tue Jul 29 21:34:05 2014] Function: mysql_fetch_float executed with result: "17.398199".
    [Tue Jul 29 21:34:05 2014] Function: mysql_free_result executed.

  • Uff, sowas hab ich noch nicht gesehen. Entweder wir übersehen hier beide komplett was, oder du hast da was ganz spezielles fabriziert.


    Ändere mal
    ergebnis = mysql_fetch_float();


    Zu
    ergebnis = -1.1234;


    Was wird jetzt geprintet, bei den zweien?



    Hast du die Include float auch bei den Includes? Hast du an anderen Stellen auch Probleme mit floats?

  • Das setzt zwar die ganze funktion ausßer kraft aber gut, nun sieht die funktion so aus:


    stock Float:MySQL_GetFloat1(Was[],Tabelle[],Wo1[],Ist1[])
    {
    mysql_real_escape_string(Was,Was);
    mysql_real_escape_string(Tabelle,Tabelle);
    mysql_real_escape_string(Wo1,Wo1);
    mysql_real_escape_string(Ist1,Ist1);
    new Query[512], Float:ergebnis;
    format(Query,sizeof(Query),"SELECT %s FROM %s WHERE %s='%s'",Was,Tabelle,Wo1,Ist1);
    mysql_query(Query);
    mysql_store_result();
    ergebnis = -1.1234;
    printf("ergebnis: %f",ergebnis);
    printf("Float: %f",mysql_fetch_float());
    mysql_free_result();
    return ergebnis;
    }


    und das ergebnis was in der server_log.txt steht ist:


    [22:42:26] ergebnis: -1.123399
    [22:42:26] Float: -1.348413

  • ich hab jetz auch mal das mysql plugin neu installiert und jetzt bekomme ich den fehler:
    Failed (libmysqlclient_r.so.16: cannot open shared object file: No such file or directory)


    keine ahnung wie ich den behebe.

  • OK also auch nach dem Update des Plugins(stable version) ist das ergebnis was in meienr server log steht das:


    [23:26:54] -0.000000
    [23:26:54] ergebnis: 0.000000
    [23:26:54] Float: -1.099903


    und das ist die mysql funktion:


    stock Float:MySQL_GetFloat1(Was[],Tabelle[],Wo1[],Ist1[])
    {
    mysql_real_escape_string(Was,Was);
    mysql_real_escape_string(Tabelle,Tabelle);
    mysql_real_escape_string(Wo1,Wo1);
    mysql_real_escape_string(Ist1,Ist1);
    new Query[512], Float:ergebnis;
    format(Query,sizeof(Query),"SELECT %s FROM %s WHERE %s='%s'",Was,Tabelle,Wo1,Ist1);
    mysql_query(Query);
    mysql_store_result();
    new tmp[20];
    format(tmp, 20, "%f", mysql_fetch_float());
    print(tmp);
    ergebnis = floatstr(tmp);
    printf("ergebnis: %f",ergebnis);
    printf("Float: %f",mysql_fetch_float());
    mysql_free_result();
    return ergebnis;
    }

  • stock Float:MySQL_GetFloat1(Was[],Tabelle[],Wo1[],Ist1[])
    {
    mysql_real_escape_string(Was,Was);
    mysql_real_escape_string(Tabelle,Tabelle);
    mysql_real_escape_string(Wo1,Wo1);
    mysql_real_escape_string(Ist1,Ist1);
    new Query[512], Float:ergebnis;
    format(Query,sizeof(Query),"SELECT %s FROM %s WHERE %s='%s'",Was,Tabelle,Wo1,Ist1);
    mysql_query(Query);
    mysql_store_result();
    printf("Float: %f",mysql_fetch_float());
    ergebnis = mysql_fetch_float();
    printf("ergebnis: %f",ergebnis);
    mysql_free_result();
    return ergebnis;
    }


    So kann ich es dir noch anbieten. Einfach mal umgedreht. Wenn das auch nicht tut, kann ich dir anbieten morgen abend mal kurz mit TeamViewer draufzuschauen, ob das an was anderem liegt.