Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перевод данных из dbf->postgres знак "\" в строке, string="ул. Ромашкина 9\3" 
:(
    Опции темы
izver84
Дата 4.2.2013, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

Репутация: нет
Всего: 1



Здрасте.
Есть дбф jrbp файл.

мне надо перенести данные из дбф в postgresl.

Код

use DBD::XBase;
use DBI;
use Encode qw /from_to/;
$dbname = "sbit";
$username = "postgres";
$password = "pass";
$dbhost = "192.168.4.2";

$dir = "/mnt/sbit/MOLDS/";

my $xbase_dbh = DBI->connect("DBI:XBase:$dir", undef, undef, {RaiseError =>1});
$dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=$dbhost","$username","$password",
            {PrintError => 0});

if ($DBI::err != 0) {
  print $DBI::errstr . "\n";
  exit($DBI::err);
}
my $sel = "SELECT ADPOT FROM jrbp";
my $sel_csr = $xbase_dbh->prepare($sel);
$sel_csr->execute();

@st=();
while ( @row = $sel_csr->fetchrow_array )
{
 foreach $st(@row)
{push(@st,$st."\t");}


$qw="INSERT INTO jrbpi(ADPOT)
values(substr('$st[-1]',1,35)])";
Encode::from_to ($qw, 'cp866', 'utf8');
$pgb = $dbh->prepare($qw) or die "Prepare: $qw", $dbh->errstr;
$pgb->execute or die "Executing: $qw", $pgb->errstr;
}



Прога выдает ошибку.
Код

WARNING:  nonstandard use of escape in a string literal
LINE 2: values(substr('ул. Ромашкина 9\3 ',1,35))
                      ^
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.



Ошибка в содержании символа "\".

Как обойти эту бяку?

Нужно, чтобы загружалась с этим символом.



--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
arto
Дата 4.2.2013, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



использовать placeholders
PM MAIL ICQ   Вверх
DProf
Дата 4.2.2013, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 28.9.2012

Репутация: 1
Всего: 1



Если проблема только с '\', то наверно можно предварительно тупо обработать строку и заменить '\' на '\\'
Код

$temp = substr ( $st[-1], 1, 35 );
$temp =~ s{/}{//}g ;
$qw="INSERT INTO jrbpi(ADPOT) values(" .  $temp ")";

Или я что то не понимаю?
PM MAIL   Вверх
arto
Дата 5.2.2013, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



1. а зачем тогда меняете / на // ?
2. вот так и появляются sql injections.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0902 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.