Как вставить текстовое поле MySQL с Perl - PullRequest
0 голосов
/ 03 сентября 2011

Я новичок в Perl, и сегодня у меня возникла проблема.Я хочу получить содержимое страницы URL, а затем сохранить его в mysql.

вот структура таблицы mysql:

table:webpage
id INT(11)
url VARCHAR(300)
html mediumtext

ниже мой perl-код

use DBI;
use LWP::Simple;
use Encode;
$url="http://search.cpan.org/~rfoley/File-Data-1.15/lib/File/Data.pm";
$content = get($url);
my $dbh = DBI->connect( 'DBI:mysql:mytest', 'root', '123' );
$dbh->begin_work();
$dbh->do("INSERT INTO webpage (id, url,html) VALUES (1,$url,$content)");
$dbh->commit();
$dbh->disconnect();

затемвывод, как следует

DBD::mysql::db do failed: You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use  near ':
//search.cpan.org/~rfoley/File-Data-1.15/lib/File/Data.pm,<!DOCTYPE HTML PUBLIC'
at line 1 at E:/program_data/eclipse_j2ee_workspace/pdemo/db.pl line 9.

- это любой, кто может мне помочь. спасибо

Ответы [ 3 ]

1 голос
/ 03 сентября 2011

Вам нужно, как минимум, заключить в кавычки строковые значения в вашем запросе. Что-то вроде:

$dbh->do("INSERT INTO webpage (id, url,html) VALUES (1,'$url','$content')");

Но это совсем не безопасно, в частности, $content может содержать кавычки или другие символы, которые в лучшем случае нарушат ваш запрос, а в худшем - уничтожат вашу базу данных (читайте о SQL Injection).

Поэтому вам следует рассмотреть возможность использования заполнителей и значений связывания , чтобы избежать этих ловушек.

0 голосов
/ 06 сентября 2011

Лучше, используйте заполнители

my $sth = $dbh->prepare('INSERT INTO webpage (id, url,html) VALUES (1,?,?)');
$sth->execute($url,$content);
0 голосов
/ 03 сентября 2011

Цитируйте свою строку перед вставкой:

$content = $dbh->quote($content);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...