mysql - 使用perl将特殊字符插入mysql

标签 mysql perl

嗨,我对 Perl 很陌生。 我有一个像这样的 temp_data.txt 文件

Id    Comments
--------------------------------
1      this is a 'comment'
2      special comment
3      user comment 'user'
-----------------------------------


  open (MYFILE, 'temp_data.txt');
while (<MYFILE>) {
if($_=~/^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(.+)/)
{
    $id=$1;    
    $comment = $2;
}

while(<MYFILE>)
{
    $line=$_;
    if($line=~/^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(.+)/)
    {
        seek(MYFILE, -length($_), 1);
        last;
}
    else
    {           if($_=~/\s*(.*)/)
        {
            $comment .=$1;

        }
    }
}

my $queryString = "INSERT INTO Headline (id,comment) VALUES ('$id', ' $comment')";

$sth = $dbh->prepare($queryString);
$sth->execute() or die $DBI::errstr;
$sth->finish();
}

但是在插入数据库时​​如果遇到特殊字符会抛出这样的错误。

DBD::mysql::st execute 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 'comment')' at line 1 at head.pl line 1.

有人能帮我吗? 提前致谢

最佳答案

也许,您要插入的数据具有特殊符号。为此使用参数化查询(它将保护您免受 SQL 注入(inject)):

my $queryString = "INSERT INTO Headline (id,comment) VALUES (?, ?)";

$sth = $dbh->prepare($queryString);
$sth->execute($id, $comment) or die $DBI::errstr;
$sth->finish();

关于mysql - 使用perl将特殊字符插入mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22779060/

相关文章:

mysql - 是否可以查询 MySQL/MariaDB 数据库中的索引?

php - 从服务器文件夹中删除图像

perl - 如何检查 unix 时间早了 1 天

regex - 在Windows中用perl替换所有文件中的字符串

perl - Perl 中的 $dxyabc 和 ${dxyabc} 有什么区别?

mysql - 如何在嵌套数组 json 上选择带有条件的 mysql?

java - 如果我通过 phpMyAdmin 执行查询,它可以工作,但在我的 java 程序中却不能

arrays - perl丢弃映射操作中的第一个数组元素

php - 通过网络从共享文件中读取数据

mysql - Spring Data JPA 通过主/外键、对象保存顺序保存一对一关系