Использование C для CGI под Apache: ошибка MySQL: слишком много соединений - PullRequest
0 голосов
/ 22 июня 2011

Я получаю слишком много подключений , когда пытаюсь подключиться к MySQL.Почему я получаю эту ошибку, хотя я закрываю соединение всякий раз, когда я подключаюсь к серверу MySQL?Как мне решить эту проблему?

ОБНОВЛЕНИЕ

Я запускаю это в Ubuntu.Мой проект - CGI, написанный на C. Мой веб-сервер - Apache.Это пример моего исходного кода.Другие почти такие же.

#include <mysql.h>
#include <stdio.h>
#include <string.h>

    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;

    char *server = "localhost";
    char *user = "root";
    char *password = "jitcomm"; /* set me first */
    char *database = "profile";

    int main(int argc, char *argv[]) 
    {
        if(argc==1)
            getAll();
        else 
            getOneUser(argv[1]);
        return 0;       
    }

    // show user 
    void getAll()
    {

        char  query[500];
        char result[1024];
        memset(result,0,1024);
        memset(query,0,500);
        conn = mysql_init(NULL);
        int i;
        FILE *fout;
                if((fout = fopen("gUsers","w"))==NULL)
                {
                        printf("error with file");
                }


        /* Connect to database */
        if (!mysql_real_connect(conn, server,
        user, password, database, 0, NULL, 0)) {
            fprintf(stderr, "%s\n", mysql_error(conn));
            exit(1);
       }

        /* send SQL query */
        sprintf(query,"select * from userTbl");
        if (mysql_query(conn, query)) 
        {
            fprintf(stderr, "%s\n", mysql_error(conn));
            exit(2);
       }
        res = mysql_use_result(conn);

        /* output table name */
        system("clear");
        sprintf(result,"ID\t Name\t Password\t Role\n");
            while ((row = mysql_fetch_row(res)) != NULL)
        {
             //printf("%s \n", row[0]);
            //strcpy(id,row[0]);
            sprintf(query,"%s\t %s\t %s\t\t %s\n",row[0], row[1], row[2], row[3]);
            strcat(result,query);
            for(i = 1 ;i<4;i++)
                        {
                if(i==1)
                                fprintf(fout,"%s\n",row[i]);    //write data to the file
                if(i==2)
                                fprintf(fout,"%s\n",row[i]);    //write data to the file
                if(i==3)
                                fprintf(fout,"%s\n",row[i]);    //write data to the file

                        }   
        }
        /* close connection */
        mysql_free_result(res);
        mysql_close(conn);
        //printf(result);   
    }

    void getOneUser(char *n)
        {

                char  query[500];
                char result[1024];
                memset(result,0,1024);
                memset(query,0,500);
                conn = mysql_init(NULL);
                int i;
                FILE *fout;
                if((fout = fopen("gUsers","w"))==NULL)
                {
                        printf("error with file");
                }


                /* Connect to database */
                if (!mysql_real_connect(conn, server,
                user, password, database, 0, NULL, 0)) {
                fprintf(stderr, "%s\n", mysql_error(conn));
                exit(1);
           }

                /* send SQL query */
                sprintf(query,"select * from userTbl where name = '%s'",n);
                if (mysql_query(conn, query))
                {
                fprintf(stderr, "%s\n", mysql_error(conn));
                exit(2);
           }
                res = mysql_use_result(conn);

                /* output table name */
                system("clear");
                sprintf(result,"ID\t Name\t Password\t Role\n");
                while ((row = mysql_fetch_row(res)) != NULL)
                {
                         //printf("%s \n", row[0]);
                         //                        //strcpy(id,row[0]);
                        sprintf(query,"%s\t %s\t %s\t\t %s\n",row[0], row[1], row[2], row[3]);
                        strcat(result,query);
            for(i = 1 ;i<4;i++)
                        {
                                if(i==1)
                                fprintf(fout,"%s\n",row[i]);    //write data to the file
                                if(i==2)
                                fprintf(fout,"%s\n",row[i]);    //write data to the file
                if(i==3)
                                fprintf(fout,"%s\n",row[i]);    //write data to the file

                        }
                }
                /* close connection */
                mysql_free_result(res);
                mysql_close(conn);
                //printf(result);
        }
...