我是perl的新手,今天我遇到了一个问题。我想获取一个url页面内容,然后将其保存到mysql。
这里是mysql表strutcture:
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.
任何人都可以帮助我。谢谢
答案 0 :(得分:1)
您至少需要在查询中引用字符串值。类似的东西:
$dbh->do("INSERT INTO webpage (id, url,html) VALUES (1,'$url','$content')");
但这根本不安全,$content
特别可能包含引号或其他符号,这些符号最多会破坏您的查询,最坏的情况是杀死您的数据库(请参阅SQL注入)。
所以你应该考虑使用placeholders and bind values来避免这些陷阱。
答案 1 :(得分:0)
在插入之前引用你的字符串:
$content = $dbh->quote($content);
答案 2 :(得分:0)
更好,使用占位符
my $sth = $dbh->prepare('INSERT INTO webpage (id, url,html) VALUES (1,?,?)');
$sth->execute($url,$content);