Forum Webscript.Ru

Программирование => Perl => Тема начата: Perlita от 13 Мая 2002, 14:58:55

Название: Mysql --gemor )))
Отправлено: 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]\')";

И все вроде бы работает, но...
если в записи есть символ \\ или \', то такие записи не добавляются.

В чем же дело?
Название: Mysql --gemor )))
Отправлено: fidget от 13 Мая 2002, 15:12:58
некоторые символы надо escapе\'ить
http://www.mysql.com/doc/S/t/String_syntax.html
http://www.php.net/manual/en/function.mysql-escape-string.php
Название: Mysql --gemor )))
Отправлено: Green Kakadu от 16 Мая 2002, 04:31:51
исп. метод quote()
Название: Re to all
Отправлено: Perlita от 18 Мая 2002, 12:48:05
Thanx 2 all :)
Название: Mysql --gemor )))
Отправлено: от 18 Мая 2002, 17:40:32
Можешь сделать так:
$dbh->do("INSERT INTO test VALUES(?,?,?)", undef, 1, 2, 3);
Тогда эскейпить не надо
Название: Not Yet
Отправлено: от 22 Мая 2002, 13:00:35
Записи добаляются строкой
$dbh->do("INSERT INTO test VALUES (\'$X[1]\',\'$X[2]\',\'$X[3]\');");
нужно эскейтить символы \' \\ _
Метод quote работает, но ничего не эскейпит ))))
Название: Mysql --gemor )))
Отправлено: от 22 Мая 2002, 15:04:24
#!/usr/bin/perl

use DBI;
my $dbh = DBI->connect("DBI:ExampleP:");
my $test = "\'\'\'\\\\_";
$test = $dbh->quote($test);
print "$test\\n";

Результат -
\'\'\'\'\'\'\'\\_\'
Как видишь \' заменяется на \'\'
Название: to unregistr
Отправлено: Perlita от 22 Мая 2002, 16:36:19
А что делать, если требуется не менять \' на "  
а занести запись, как она выглядит изначально?
Название: Mysql --gemor )))
Отправлено: от 22 Мая 2002, 16:43:10
Когда ты будешь делать выборку из Базы Данных то получишь оригинальный вариант без двойных апострофов.