PHPMyAdmin - Too many connections
#1

Hello. I made a business system for my script, using mysql, and for some reason when I run the server I recieve an error in my phpmyadmin saying "too many connections". After even a day or two, it will show the same thing and never go away unless I uninstall it. How would I go about fixing the "too many connections" error? This happened after adding the loading for businesses. This is the function:

pawn Код:
stock LoadBusinesses()
{
    for(new i = 0; i < MAX_BUSINESSES; i++)
    {
        new szQuery[600], savingstring[24];

        format(szQuery, sizeof(szQuery), "SELECT * FROM businesses WHERE Id = %i", i);
        mysql_query(szQuery, THREAD_NO_RESULT, i, iConnectionHandle);
        while(mysql_fetch_row_format(szQuery,"|"))
        {
            mysql_fetch_field_row(savingstring, "Name"); format(BusinessInfo[i][Name], 30, savingstring);
            mysql_fetch_field_row(savingstring, "Owner"); format(BusinessInfo[i][Owner], 30, savingstring);
            mysql_fetch_field_row(savingstring, "Id"); BusinessInfo[i][Id] = strval(savingstring);
            mysql_fetch_field_row(savingstring, "EnterX"); BusinessInfo[i][EnterPos][0] = floatstr(savingstring);
            mysql_fetch_field_row(savingstring, "EnterY"); BusinessInfo[i][EnterPos][1] = floatstr(savingstring);
            mysql_fetch_field_row(savingstring, "EnterZ"); BusinessInfo[i][EnterPos][2] = floatstr(savingstring);
            mysql_fetch_field_row(savingstring, "ExitX"); BusinessInfo[i][ExitPos][0] = floatstr(savingstring);
            mysql_fetch_field_row(savingstring, "ExitY"); BusinessInfo[i][ExitPos][1] = floatstr(savingstring);
            mysql_fetch_field_row(savingstring, "ExitZ"); BusinessInfo[i][ExitPos][2] = floatstr(savingstring);
            mysql_fetch_field_row(savingstring, "Interior"); BusinessInfo[i][Interior] = strval(savingstring);
            mysql_fetch_field_row(savingstring, "VirtualWorld"); BusinessInfo[i][VW] = strval(savingstring);
            mysql_fetch_field_row(savingstring, "Money"); BusinessInfo[i][Money] = strval(savingstring);
            mysql_fetch_field_row(savingstring, "Type"); BusinessInfo[i][Type] = strval(savingstring);
        }
        new BizName[30]; format(BizName, 24, "%s", BusinessInfo[i][Name]);
        strreplace(BizName, '_', ' ');
        format(szQuery, sizeof(szQuery), "%s\nBusiness ID: %i\n Owner: %s\nBusiness Type: %s", "New Business", BizName, i, BusinessInfo[i][Owner], GetBusinessType(BusinessInfo[i][Type]));

        BusinessInfo[i][TextLabel] = CreateDynamic3DTextLabel(szQuery, COLOR_YELLOW, BusinessInfo[i][EnterPos][0], BusinessInfo[i][EnterPos][1], BusinessInfo[i][EnterPos][2], 20, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, 0,  0, -1, 100.0);
        BusinessInfo[i][Pickup] = CreateDynamicPickup(1318, 1,BusinessInfo[i][EnterPos][0],BusinessInfo[i][EnterPos][1],BusinessInfo[i][EnterPos][2],0,0,-1,100);

        printf("Business ID: %i was loaded", i);
    }
    return 1;
}
I also have a question about the function. Does this method still work for r7 blueg's mysql? I didn't originally do it this way and I only added this after I got the error the first time. The first way I did it was to loop and create a query for each loop which went to a thread and loaded it. Would this be more efficient? Also, how would I go about increasing connections, and what should the value be judging by my code? (PS: Using wampserver).

Thanks,
Kindred
Reply
#2

All threaded queries must use a callback. Furthermore, your code is TERRIBLY inefficient. I keep redirecting people to my thread, but yet many people still treat a database as if it were a file system. With MySQL you read a table as a whole and process it as such.

https://sampforum.blast.hk/showthread.php?tid=366019
Reply
#3

Thanks for the thread and informing me it was inefficient. I haven't scripted in ages and never really got into MySQL. This is how I load my businesses now:

pawn Код:
stock LoadBusinesses()
{
    mysql_function_query(1, "SELECT * FROM businesses", false, "OnBusinessLoaded", "");
    return 1;
}

forward OnBusinessLoaded();

public OnBusinessLoaded()
{
    new result[256], idx = 0, businessid;
    mysql_store_result();
    while(mysql_fetch_row_format(result,"|"))
    {
        mysql_fetch_field_row(result, "Id"); businessid = strval(result); BusinessInfo[businessid][Id] = strval(result);
        mysql_fetch_field_row(result, "Name"); format(BusinessInfo[businessid][Name], 30, result);
        mysql_fetch_field_row(result, "Owner"); format(BusinessInfo[businessid][Owner], 30, result);
        mysql_fetch_field_row(result, "EnterX"); BusinessInfo[businessid][EnterPos][0] = floatstr(result);
        mysql_fetch_field_row(result, "EnterY"); BusinessInfo[businessid][EnterPos][1] = floatstr(result);
        mysql_fetch_field_row(result, "EnterZ"); BusinessInfo[businessid][EnterPos][2] = floatstr(result);
        mysql_fetch_field_row(result, "ExitX"); BusinessInfo[businessid][ExitPos][0] = floatstr(result);
        mysql_fetch_field_row(result, "ExitY"); BusinessInfo[businessid][ExitPos][1] = floatstr(result);
        mysql_fetch_field_row(result, "ExitZ"); BusinessInfo[businessid][ExitPos][2] = floatstr(result);
        mysql_fetch_field_row(result, "Interior"); BusinessInfo[businessid][Interior] = strval(result);
        mysql_fetch_field_row(result, "VirtualWorld"); BusinessInfo[businessid][VW] = strval(result);
        mysql_fetch_field_row(result, "Money"); BusinessInfo[businessid][Money] = strval(result);
        mysql_fetch_field_row(result, "Type"); BusinessInfo[businessid][Type] = strval(result);
        idx ++;
    }
   
    new BizName[30]; format(BizName, 24, "%s", BusinessInfo[businessid][Name]);
    strreplace(BizName, '_', ' ');
    format(result, sizeof(result), "%s\nBusiness ID: %i\n Owner: %s\nBusiness Type: %s", "New Business", BizName, businessid, BusinessInfo[businessid][Owner], GetBusinessType(BusinessInfo[businessid][Type]));

    BusinessInfo[businessid][TextLabel] = CreateDynamic3DTextLabel(result, COLOR_YELLOW, BusinessInfo[businessid][EnterPos][0], BusinessInfo[businessid][EnterPos][1], BusinessInfo[businessid][EnterPos][2], 20, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, 0,  0, -1, 100.0);
    BusinessInfo[businessid][Pickup] = CreateDynamicPickup(1318, 1,BusinessInfo[businessid][EnterPos][0],BusinessInfo[businessid][EnterPos][1],BusinessInfo[businessid][EnterPos][2],0,0,-1,100);

    mysql_free_result();
   
    printf("[MySQL] Loaded %i businesses", idx);
    return 1;
}
However, since that "while" is in there, should I create the text label and pickup inside there as-well? And would this work?

EDIT: New script, would this be how it should be other than the one I posted above?

pawn Код:
stock LoadBusinesses()
{
    mysql_function_query(1, "SELECT * FROM businesses", false, "OnBusinessLoaded", "");
    return 1;
}

forward OnBusinessLoaded();

public OnBusinessLoaded()
{
    new result[256], idx = 0, businessid;
    mysql_store_result();
    while(mysql_fetch_row_format(result,"|"))
    {
        mysql_fetch_field_row(result, "Id"); businessid = strval(result); BusinessInfo[businessid][Id] = strval(result);
        mysql_fetch_field_row(result, "Name"); format(BusinessInfo[businessid][Name], 30, result);
        mysql_fetch_field_row(result, "Owner"); format(BusinessInfo[businessid][Owner], 30, result);
        mysql_fetch_field_row(result, "EnterX"); BusinessInfo[businessid][EnterPos][0] = floatstr(result);
        mysql_fetch_field_row(result, "EnterY"); BusinessInfo[businessid][EnterPos][1] = floatstr(result);
        mysql_fetch_field_row(result, "EnterZ"); BusinessInfo[businessid][EnterPos][2] = floatstr(result);
        mysql_fetch_field_row(result, "ExitX"); BusinessInfo[businessid][ExitPos][0] = floatstr(result);
        mysql_fetch_field_row(result, "ExitY"); BusinessInfo[businessid][ExitPos][1] = floatstr(result);
        mysql_fetch_field_row(result, "ExitZ"); BusinessInfo[businessid][ExitPos][2] = floatstr(result);
        mysql_fetch_field_row(result, "Interior"); BusinessInfo[businessid][Interior] = strval(result);
        mysql_fetch_field_row(result, "VirtualWorld"); BusinessInfo[businessid][VW] = strval(result);
        mysql_fetch_field_row(result, "Money"); BusinessInfo[businessid][Money] = strval(result);
        mysql_fetch_field_row(result, "Type"); BusinessInfo[businessid][Type] = strval(result);
       
        new BizName[30]; format(BizName, 24, "%s", BusinessInfo[businessid][Name]);
        strreplace(BizName, '_', ' ');
        format(result, sizeof(result), "%s\nBusiness ID: %i\n Owner: %s\nBusiness Type: %s", "New Business", BizName, businessid, BusinessInfo[businessid][Owner], GetBusinessType(BusinessInfo[businessid][Type]));

        BusinessInfo[businessid][TextLabel] = CreateDynamic3DTextLabel(result, COLOR_YELLOW, BusinessInfo[businessid][EnterPos][0], BusinessInfo[businessid][EnterPos][1], BusinessInfo[businessid][EnterPos][2], 20, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, 0,  0, -1, 100.0);
        BusinessInfo[businessid][Pickup] = CreateDynamicPickup(1318, 1,BusinessInfo[businessid][EnterPos][0],BusinessInfo[businessid][EnterPos][1],BusinessInfo[businessid][EnterPos][2],0,0,-1,100);

        idx ++;
    }

    mysql_free_result();
   
    printf("[MySQL] Loaded %i businesses", idx);
    return 1;
}
EDIT: I'm still getting that error with PHP with this script, even though the script is running extremely fast now (business script).

Код:
#1040 - Too many connections
I really need to fix this, if anyone has any idea how to.
Reply
#4

You have to edit the configuration for MySQL I think. If you ****** the error, I can guarantee you that you will find the solution pretty fast.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)