IPN выдает ошибку
-
- Сообщения: 20
- Зарегистрирован: Чт окт 26, 2006 8:28 am
- Откуда: Украина, Первомайск
- Контактная информация:
IPN выдает ошибку
При работе модуль IPN відает следующую ошибку (debug=3):
Debug mode on
<p>select u.uid, dv.ip, u.id,
'',
0,
0,
dv.tp_id,
if (u.company_id > 0, cb.id, b.id),
if (c.name IS NULL, b.deposit, cb.deposit)+u.credit,
tp.payment_type,
0,
0,
tp.octets_direction,
u.reduction,
CONNECT_INFO
FROM (users u, dv_main dv)
LEFT JOIN companies c ON (u.company_id=c.id)
LEFT JOIN bills b ON (u.bill_id=b.id)
LEFT JOIN bills cb ON (c.bill_id=cb.id)
LEFT JOIN tarif_plans tp ON (tp.id=dv.tp_id)
WHERE u.uid=dv.uid
and dv.ip > 0 and u.disable=0 and dv.disable=0;</p>
DBD::mysql::st execute failed: Unknown column 'CONNECT_INFO' in 'field list' at /home/opt/abills/libexec/../Abills/mysql/main.pm line 131.
и в базу ничего не заносится.
Debug mode on
<p>select u.uid, dv.ip, u.id,
'',
0,
0,
dv.tp_id,
if (u.company_id > 0, cb.id, b.id),
if (c.name IS NULL, b.deposit, cb.deposit)+u.credit,
tp.payment_type,
0,
0,
tp.octets_direction,
u.reduction,
CONNECT_INFO
FROM (users u, dv_main dv)
LEFT JOIN companies c ON (u.company_id=c.id)
LEFT JOIN bills b ON (u.bill_id=b.id)
LEFT JOIN bills cb ON (c.bill_id=cb.id)
LEFT JOIN tarif_plans tp ON (tp.id=dv.tp_id)
WHERE u.uid=dv.uid
and dv.ip > 0 and u.disable=0 and dv.disable=0;</p>
DBD::mysql::st execute failed: Unknown column 'CONNECT_INFO' in 'field list' at /home/opt/abills/libexec/../Abills/mysql/main.pm line 131.
и в базу ничего не заносится.
Кто владеет Информацией - тот владеет Миром.
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
abills/abills.sql здесь, конечно, ни при чём... Видимо,проблемы из-за несовместимости с sql5.
Смысл в том что в SQL5 значительные изменения синтаксиса, а совместимость они не добавили
к примеру.
отныне сложные запросы в которых используется такая форма записи:
SELECT blah FROM table1, table2 WHERE blahblah - некорректны. Должно быть
SELECT blah FROM (table1, table2) WHERE blahblah
вот тут много написано про то что теперь из запросов не получается.
http://bugs.mysql.com/bug.php?id=13551
Так чта сырцы править нада аднака
Смысл в том что в SQL5 значительные изменения синтаксиса, а совместимость они не добавили
к примеру.
отныне сложные запросы в которых используется такая форма записи:
SELECT blah FROM table1, table2 WHERE blahblah - некорректны. Должно быть
SELECT blah FROM (table1, table2) WHERE blahblah
вот тут много написано про то что теперь из запросов не получается.
http://bugs.mysql.com/bug.php?id=13551
Так чта сырцы править нада аднака
Кстати, а всё-таки какой смысл имеет параметр конфига $conf{IPN_STATIC_IP}=1;?
Если верить доке:
Использовать только статические адреса.
Система проверяет статические адреса клиентов и присваивает им трафик. Исключая таким образом потери из за переподключений при использовании динамических адресов авторизации.
Так вот, ежли он равен 1, то в модуле Abills/mysql/Ipn_Collector.pm мы попадаем сюды:
if ($CONF->{IPN_STATIC_IP}) {
$sql="select u.uid, dv.ip, u.id,
'',
0,
0,
dv.tp_id,
if (u.company_id > 0, cb.id, b.id),
if (c.name IS NULL, b.deposit, cb.deposit)+u.credit,
tp.payment_type,
0,
0,
tp.octets_direction,
u.reduction,
CONNECT_INFO
FROM (users u, dv_main dv)
LEFT JOIN companies c ON (u.company_id=c.id)
LEFT JOIN bills b ON (u.bill_id=b.id)
LEFT JOIN bills cb ON (c.bill_id=cb.id)
LEFT JOIN tarif_plans tp ON (tp.id=dv.tp_id)
WHERE u.uid=dv.uid
and dv.ip > 0 and u.disable=0 and dv.disable=0;";
}
то бишь формируется описанный выше запрос в таблицу dv_main. Но в ней ДЕЙСТВИТЕЛЬНО НЕТ поля CONNECT_INFO! Поэтому и получаем:
DBD::mysql::st execute failed: Unknown column 'CONNECT_INFO' in 'field list' at /home/opt/abills/libexec/../Abills/mysql/main.pm line 131.
А вот если $conf{IPN_STATIC_IP}=1; закомментировать, то попадём сюды:
elsif ( $CONF->{IPN_DEPOSIT_OPERATION} ) {
$sql="select u.uid, calls.framed_ip_address, calls.user_name,
calls.acct_session_id,
calls.acct_input_octets,
calls.acct_output_octets,
dv.tp_id,
if(u.company_id > 0, cb.id, b.id),
if(c.name IS NULL, b.deposit, cb.deposit)+u.credit,
tp.payment_type,
UNIX_TIMESTAMP() - calls.lupdated,
calls.nas_id,
tp.octets_direction,
u.reduction,
CONNECT_INFO
FROM (dv_calls calls, users u)
LEFT JOIN companies c ON (u.company_id=c.id)
LEFT JOIN bills b ON (u.bill_id=b.id)
LEFT JOIN bills cb ON (c.bill_id=cb.id)
LEFT JOIN dv_main dv ON (u.uid=dv.uid)
LEFT JOIN tarif_plans tp ON (tp.id=dv.tp_id)
WHERE u.id=calls.user_name
and calls.nas_id IN ($DATA->{NAS_ID});";
}
и сформируется корректный запрос в dv_calls.
Так как всё-таки должно быть?
Если верить доке:
Использовать только статические адреса.
Система проверяет статические адреса клиентов и присваивает им трафик. Исключая таким образом потери из за переподключений при использовании динамических адресов авторизации.
Так вот, ежли он равен 1, то в модуле Abills/mysql/Ipn_Collector.pm мы попадаем сюды:
if ($CONF->{IPN_STATIC_IP}) {
$sql="select u.uid, dv.ip, u.id,
'',
0,
0,
dv.tp_id,
if (u.company_id > 0, cb.id, b.id),
if (c.name IS NULL, b.deposit, cb.deposit)+u.credit,
tp.payment_type,
0,
0,
tp.octets_direction,
u.reduction,
CONNECT_INFO
FROM (users u, dv_main dv)
LEFT JOIN companies c ON (u.company_id=c.id)
LEFT JOIN bills b ON (u.bill_id=b.id)
LEFT JOIN bills cb ON (c.bill_id=cb.id)
LEFT JOIN tarif_plans tp ON (tp.id=dv.tp_id)
WHERE u.uid=dv.uid
and dv.ip > 0 and u.disable=0 and dv.disable=0;";
}
то бишь формируется описанный выше запрос в таблицу dv_main. Но в ней ДЕЙСТВИТЕЛЬНО НЕТ поля CONNECT_INFO! Поэтому и получаем:
DBD::mysql::st execute failed: Unknown column 'CONNECT_INFO' in 'field list' at /home/opt/abills/libexec/../Abills/mysql/main.pm line 131.
А вот если $conf{IPN_STATIC_IP}=1; закомментировать, то попадём сюды:
elsif ( $CONF->{IPN_DEPOSIT_OPERATION} ) {
$sql="select u.uid, calls.framed_ip_address, calls.user_name,
calls.acct_session_id,
calls.acct_input_octets,
calls.acct_output_octets,
dv.tp_id,
if(u.company_id > 0, cb.id, b.id),
if(c.name IS NULL, b.deposit, cb.deposit)+u.credit,
tp.payment_type,
UNIX_TIMESTAMP() - calls.lupdated,
calls.nas_id,
tp.octets_direction,
u.reduction,
CONNECT_INFO
FROM (dv_calls calls, users u)
LEFT JOIN companies c ON (u.company_id=c.id)
LEFT JOIN bills b ON (u.bill_id=b.id)
LEFT JOIN bills cb ON (c.bill_id=cb.id)
LEFT JOIN dv_main dv ON (u.uid=dv.uid)
LEFT JOIN tarif_plans tp ON (tp.id=dv.tp_id)
WHERE u.id=calls.user_name
and calls.nas_id IN ($DATA->{NAS_ID});";
}
и сформируется корректный запрос в dv_calls.
Так как всё-таки должно быть?
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация: