Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > DBD::Pg уточнение запроса по типу поля "inet"


Автор: n00zdri 27.8.2010, 00:55
Всем привет, у меня тут вот такая вот засада:

Код

foreach my $ip_for_add (@bonly) {
    my $query_for_natid = $dbh_for_natid->prepare("SELECT nat_id FROM subnets WHERE addr>>'$ip_for_add'");
    $query_for_natid->execute();
    while (@row_natid = $query_for_natid->fetchrow_array()) {
        ($natid) = @row_natid;
...
...

 
В консоль мне выплёвывает вот так: 

Код

DBD::Pg::st execute failed: ERROR:  invalid input syntax for type inet: "10.4.8.243
" at ./pbrcfg.pl line 59.
DBD::Pg::st fetchrow_array failed: no statement executing at ./pbrcfg.pl line 62.


В psql запрос прокатывает. Если вместо переменной $ip_for_add в запросе задать, например '10.4.8.243' - запрос прокатывает, что в принципе тоже самое, что и хранится в этой переменной. Понятно, что postgres ругается на недопустимое значение для типа 'inet', но что я делаю не так? Такое ощущение, что в массиве как то по другому хранится этот айпи.

Автор: DurRandir 27.8.2010, 01:22
1. Вставлять напрямую неэкранированную переменную в запрос - очень, очень, очень, очень плохо. 
2. То, что кавычка в строке ошибки закрывается на следующей строке - намекает на \r?\n в переменной $ip_for_add. 

Автор: dva300 27.8.2010, 10:52
В MySQL есть метод quote() для таких случаев. 
Он же есть и в PG

Автор: n00zdri 27.8.2010, 18:04
Цитата(DurRandir @ 27.8.2010,  01:22)
1. Вставлять напрямую неэкранированную переменную в запрос - очень, очень, очень, очень плохо. 
2. То, что кавычка в строке ошибки закрывается на следующей строке - намекает на \r?\n в переменной $ip_for_add.

Спасибо, помогло.

2dva300 Спасибо за отклик.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)