[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: mysql & C API. Не к месту конечно, но всетаки может кто подскажет



Проблема досихпор не решена. Заметил еще один ньюанс, периодически (непостоянно, тенденции не заметил) в mysql.log попадает строка, где к acct_session_id значению добавлена точка, хотя printf этого запроса - точку не показывает. Но повторюсь, это не всегда.

SELECT UNIX_TIMESTAMP(time_in), UNIX_TIMESTAMP(time_out) FROM wtmp WHERE acct_session_id='3E252D703E33.' AND login='yudcom'

Пробовал занести эти данные в таблицу под mysql-server 4.0.22-6
Результат - тот же, т.е. как я понимаю проблема не в сервере, а либо в моей программе либо в библиотеке.

Dmitriy Sirant пишет:

Добрый день.
Второй день бьюсь с такой проблемой. Есть программа, которая должна делать выборку из базы:

command_length = strlen(SQL_ACCT_GET_STAT)+strlen(user_name)+strlen(acct_session_id);
command = (char *) malloc(command_length*sizeof(char));
sprintf(command,SQL_ACCT_GET_STAT,user_name,acct_session_id);

printf("%s\n\n", command);

rc = mysql_query(&mysql, command);
      free(command);
result = mysql_store_result(&mysql);
    num_fields = mysql_num_fields(result);
num_rows = mysql_num_rows(result);
printf("Количество строк вернул запрос: %d\n", num_rows);
printf("Количество столбцов вернул запрос: %d\n\n", num_fields);
while((row = mysql_fetch_row(result)))
{
   printf("Время  входа: %s\nВремя выхода: %s\n\n", row[0], row[1]);
}
mysql_free_result(result);

Компилирую, запускаю:
octavia:/home/lex/Projects/auth_radius# ./acct_radius stop synk 192.168.13.208 195.5.60.194 10 00000928 298 1024 1024 SELECT UNIX_TIMESTAMP(time_in), UNIX_TIMESTAMP(time_out) FROM wtmp WHERE login='synk' AND acct_session_id='00000928'

Количество строк вернул запрос: 1
Количество полей вернул запрос: 2

Время входа: 1042621344
Время выхода: 1042627185

Т.е. все ок. Теперь другой запрос:
octavia:/home/lex/Projects/auth_radius# ./acct_radius stop yudcom 192.168.3.113 195.5.60.214 13 3E252D703E33 298 1024 1024 SELECT UNIX_TIMESTAMP(time_in), UNIX_TIMESTAMP(time_out) FROM wtmp WHERE login='yudcom' AND acct_session_id='3E252D703E33'

Количество строк вернул запрос: 0
Количество полей вернул запрос: 2

Вроде как тоже все нормально, но тот же запрос сделанный из mysql консоли выдает: mysql> SELECT UNIX_TIMESTAMP(time_in), UNIX_TIMESTAMP(time_out) FROM wtmp WHERE login='yudcom' AND acct_session_id='3E252D703E33';
+-------------------------+--------------------------+
| UNIX_TIMESTAMP(time_in) | UNIX_TIMESTAMP(time_out) |
+-------------------------+--------------------------+
|              1042621109 |               1042621370 |
+-------------------------+--------------------------+
1 row in set (0.22 sec)

Причем так со всеми данными, где поле acc_session_id вида 3E25???????? (такой session_id делает portslave), а там где поле acc_session_id вида 000????? (такой session_id делает cisco) все ОК.

Debian Sarge. Mysql server - 4.1.8a (собраный с помощью правил из experimental 4.1.7-2). Изначально проблема возникла на 4.1.7-2, поэтому решил пересобрать. Свою програму компилировал gcc-3.2, gcc-3.3, gcc-3.4 - без изменений. В логах mysql.log запрос правильный. Кодировка клиета и консоли mysql одинаковые. Ошибок mysql не возвращает, просто не находит данных.

Есть идеи ?





Reply to: