The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"MySQL & RadiusD"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [ Отслеживать ]

"MySQL & RadiusD"  
Сообщение от linspb email(ok) on 18-Июл-05, 15:56 
Привет All,

помоги решить проблему,
есть FreeBSD, MPD, Radius, Mysql. Всё работает, всем доволен.
в radius в sql.conf
есть
accounting_update_query = "UPDATE ${acct_table1} \
         SET FramedIPAddress = '%{Framed-IP-Address}', \
         AcctSessionTime = '%{Acct-Session-Time}', \
         AcctInputOctets = '%{Acct-Input-Octets}', \
         AcctOutputOctets = '%{Acct-Output-Octets}' \
         WHERE AcctSessionId = '%{Acct-Session-Id}' \
         AND UserName = '%{SQL-User-Name}' \
         AND NASIPAddress= '%{NAS-IP-Address}'"
и работает она хорошо, НО! нужно написать 2 или 3,4 sql запросов для accounting_update_query.
что то на подобе:
accounting_update_query = "UPDATE ${acct_table1} \
         SET FramedIPAddress = '%{Framed-IP-Address}', \
         AcctSessionTime = '%{Acct-Session-Time}', \
         AcctInputOctets = '%{Acct-Input-Octets}', \
         AcctOutputOctets = '%{Acct-Output-Octets}' \
         WHERE AcctSessionId = '%{Acct-Session-Id}' \
         AND UserName = '%{SQL-User-Name}' \
         AND NASIPAddress= '%{NAS-IP-Address}'; \
         SELECT '1';"
не выполняется, ругается на "; SELECT '1';".
как сделать?

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

  • MySQL & RadiusD, Simps, 16:07 , 18-Июл-05, (1)  
    • MySQL & RadiusD, linspb, 16:27 , 18-Июл-05, (2)  
      • MySQL & RadiusD, linspb, 16:25 , 19-Июл-05, (3)  
        • MySQL & RadiusD, Simps, 16:44 , 19-Июл-05, (4)  
          • MySQL & RadiusD, linspb, 13:15 , 20-Июл-05, (5)  
  • MySQL & RadiusD, linspb, 13:36 , 20-Июл-05, (6)  
    • MySQL & RadiusD, ., 10:15 , 08-Апр-09, (8)  
  • MySQL & RadiusD, linspb, 17:16 , 20-Июл-05, (7)  

Сообщения по теме [Сортировка по времени | RSS]


1. "MySQL & RadiusD"  
Сообщение от Simps (ok) on 18-Июл-05, 16:07 
>Привет All,
>
>помоги решить проблему,
>есть FreeBSD, MPD, Radius, Mysql. Всё работает, всем доволен.
>в radius в sql.conf
>есть
>accounting_update_query = "UPDATE ${acct_table1} \
>         SET FramedIPAddress =
>'%{Framed-IP-Address}', \
>         AcctSessionTime = '%{Acct-Session-Time}',
>\
>         AcctInputOctets = '%{Acct-Input-Octets}',
>\
>         AcctOutputOctets = '%{Acct-Output-Octets}'
>\
>         WHERE AcctSessionId =
>'%{Acct-Session-Id}' \
>         AND UserName =
>'%{SQL-User-Name}' \
>         AND NASIPAddress= '%{NAS-IP-Address}'"
>
>и работает она хорошо, НО! нужно написать 2 или 3,4 sql запросов
>для accounting_update_query.
>что то на подобе:
>accounting_update_query = "UPDATE ${acct_table1} \
>         SET FramedIPAddress =
>'%{Framed-IP-Address}', \
>         AcctSessionTime = '%{Acct-Session-Time}',
>\
>         AcctInputOctets = '%{Acct-Input-Octets}',
>\
>         AcctOutputOctets = '%{Acct-Output-Octets}'
>\
>         WHERE AcctSessionId =
>'%{Acct-Session-Id}' \
>         AND UserName =
>'%{SQL-User-Name}' \
>         AND NASIPAddress= '%{NAS-IP-Address}';
>\
>         SELECT '1';"
>не выполняется, ругается на "; SELECT '1';".
>как сделать?

Зачем вам два запроса в одном? И какую нагрузку несет он?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "MySQL & RadiusD"  
Сообщение от linspb email(ok) on 18-Июл-05, 16:27 
>Зачем вам два запроса в одном? И какую нагрузку несет он?

Надо, правда надо.

нужно обновлять и контролировать несколько таблиц,
одним запросом не сделать.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "MySQL & RadiusD"  
Сообщение от linspb email(ok) on 19-Июл-05, 16:25 
никто не ответит?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "MySQL & RadiusD"  
Сообщение от Simps (ok) on 19-Июл-05, 16:44 
>никто не ответит?

Отвечаю =) Убери ; в конце

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "MySQL & RadiusD"  
Сообщение от linspb email(ok) on 20-Июл-05, 13:15 
>>никто не ответит?
>
>Отвечаю =) Убери ; в конце

на
...      WHERE AcctSessionId = '%{Acct-Session-Id}' \
         AND UserName = '%{SQL-User-Name}' \
         AND NASIPAddress= '%{NAS-IP-Address}'; SELECT '1'"
ругается:
rlm_sql (sql): Couldn't update SQL accounting ALIVE record - You have an error i
syntax; check the manual that corresponds to your MySQL server version for the r
to use near '; SELECT '1'' at line 1

на
...      WHERE AcctSessionId = '%{Acct-Session-Id}' \
         AND UserName = '%{SQL-User-Name}' \
         AND NASIPAddress= '%{NAS-IP-Address}' \
         SELECT '1'"
ругается:
rlm_sql (sql): Couldn't update SQL accounting ALIVE record - You have an error i
syntax; check the manual that corresponds to your MySQL server version for the r
to use near 'SELECT '1'' at line 1

блин, должно же быть решение...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "MySQL & RadiusD"  
Сообщение от linspb email(ok) on 20-Июл-05, 13:36 
невозможно!
radius использует mysql_query.
mysql_query обрабатывает по одному запросу.

точка с запятой используется понимается только в консольном клиенте mysql, но он сам делит на отдельные запросы по ; и затем на сервер посылает их по одному.

так что прийдется ковырять радиус sql_mysql.c
static int sql_query(SQLSOCK * sqlsocket, SQL_CONFIG *config, char *querystr)
{
<...skip...>
        mysql_query(mysql_sock->sock, querystr);
        return sql_check_error(mysql_errno(mysql_sock->sock));
}

Вопрос закрыт.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "MySQL & RadiusD"  
Сообщение от . on 08-Апр-09, 10:15 
>невозможно!
>radius использует mysql_query.
>mysql_query обрабатывает по одному запросу.

Возможно. Update умеет  и несколько таблиц обновлять.

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name [, tbl_name ...]
    SET col_name1=expr1 [, col_name2=expr2 ...]
    [WHERE where_definition]

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "MySQL & RadiusD"  
Сообщение от linspb email(ok) on 20-Июл-05, 17:16 
что бы работало:

--- src/modules/rlm_sql/drivers/rlm_sql_mysql/sql_mysql.c.orig  Wed Jul 20 17:08:15 2005
+++ src/modules/rlm_sql/drivers/rlm_sql_mysql/sql_mysql.c       Wed Jul 20 17:07:44 2005
@@ -145,9 +145,14 @@
  *
  *     Purpose: Issue a query to the database
  *
+ *      Patched by linspb@gmail.com
+ *     for many SQL QUERY
  *************************************************************************/
static int sql_query(SQLSOCK * sqlsocket, SQL_CONFIG *config, char *querystr)
{
+       char *r;
+       char *str;
+
        rlm_sql_mysql_sock *mysql_sock = sqlsocket->conn;

        if (config->sqltrace)
@@ -156,8 +161,13 @@
                radlog(L_ERR, "rlm_sql_mysql: Socket not connected");
                return SQL_DOWN;
        }
-
-       mysql_query(mysql_sock->sock, querystr);
+
+       r=strdup(querystr);
+       while (str=strsep(&r,";")) {
+           radlog(L_DBG,"rlm_sql_mysql: mysql_query (%s)",str);
+           mysql_query(mysql_sock->sock,str);
+       }
+
        return sql_check_error(mysql_errno(mysql_sock->sock));
}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру