Forum Webscript.Ru
Программирование => Perl => Тема начата: Perlita от 13 Мая 2002, 14:58:55
-
Вот такая странность...
Скрипт переводит некороый файл в mysql базу. Записи имеют тип Text и Char. Записи добавляются строчкой
"INSERT INTO eknb VALUES(\'$X[1]\', \'$X[2]\',\'$X[3]\',\'$X[4]\',\'$X[5]\',\'$X[6]\',\'$X[7]\',\'$X[8]\')";
И все вроде бы работает, но...
если в записи есть символ \\ или \', то такие записи не добавляются.
В чем же дело?
-
некоторые символы надо escapе\'ить
http://www.mysql.com/doc/S/t/String_syntax.html
http://www.php.net/manual/en/function.mysql-escape-string.php
-
исп. метод quote()
-
Thanx 2 all :)
-
Можешь сделать так:
$dbh->do("INSERT INTO test VALUES(?,?,?)", undef, 1, 2, 3);
Тогда эскейпить не надо
-
Записи добаляются строкой
$dbh->do("INSERT INTO test VALUES (\'$X[1]\',\'$X[2]\',\'$X[3]\');");
нужно эскейтить символы \' \\ _
Метод quote работает, но ничего не эскейпит ))))
-
#!/usr/bin/perl
use DBI;
my $dbh = DBI->connect("DBI:ExampleP:");
my $test = "\'\'\'\\\\_";
$test = $dbh->quote($test);
print "$test\\n";
Результат -
\'\'\'\'\'\'\'\\_\'
Как видишь \' заменяется на \'\'
-
А что делать, если требуется не менять \' на "
а занести запись, как она выглядит изначально?
-
Когда ты будешь делать выборку из Базы Данных то получишь оригинальный вариант без двойных апострофов.