【问题标题】:escape a sql query error message using Perl使用 Perl 转义 sql 查询错误消息
【发布时间】:2013-04-02 21:21:01
【问题描述】:

J 将我的库存数据保存在 csv 文件中。 我收到一条错误消息,因为我的插入值上有一个特殊字符,我不想处理这些值,因为它们被标记为特殊字符 $" 不再使用它们进行插入。我使用下面的代码:

#!/usr/bin/perl

# PERL MODULES WE WILL BE USING
use DBI;
use DBD::mysql;

# HTTP HEADER
print "Content-type: text/html \n\n";

# CONFIG VARIABLES
$platform = "mysql";
$database = "store";
$host = "localhost";
$port = "3306";
$tablename = "inventory";
$user = "username";
$pw = "password";

# DATA SOURCE NAME
$dsn = "dbi:$platform:$database:$host:$port";

# PERL DBI CONNECT
$connect = DBI->connect($dsn, $user, $pw);

# PREPARE THE QUERY
$query = "INSERT INTO inventory (id, product, quantity) VALUES (DEFAULT, 'tomatoes$"', '4')";
$query_handle = $connect->prepare($query);

# EXECUTE THE QUERY
$query_handle->execute();

如何跳过错误消息并移至下一个插入。

【问题讨论】:

    标签: mysql perl csv


    【解决方案1】:

    您必须在查询中转义 $,因为现在这是 perl 语法错误:

    $sql = "INSERT .... 'tomatoes$"', '4')";
                                  ^---- 
    

    那个引号会终止 sql 字符串,因为它不是一个有效的变量。试试

    $sql = "INSERT .... 'tomatoes\$"', '4')";
                                 ^--
    

    改为。

    【讨论】:

    • 非常感谢 Marc 的回复,我想知道如何避免 sql 错误。因为生成错误的插入我想丢弃这些数据而不是将它们插入到表中。
    • 在您靠近数据库的任何地方之前,请先在您的数据中查找$"。如果它存在于数据中,则只需跳过整个数据库操作。
    • 非常感谢您的回答!!!!!!这正是我想要的!请更新您的答案,因为我很乐意将其标记为已接受!
    【解决方案2】:

    处理插入语句避免 sql 注入:

    my $query = qq!INSERT INTO inventory (id, product, quantity) VALUES (?,?,?)!;
    my $query_handle = $connect->prepare($query);
    
    $query_handle->execute('DEFAULT', 'tomatoes$', '4');
    

    【讨论】:

    • 非常感谢您的提示!!!我想知道如何逃避 SQL 查询产生的错误。意思是如果查询有错误,不要做任何插入,也不要显示任何错误。再次非常感谢米格尔!!!
    • OP 不缩进注入(不正确或以其他方式)
    猜你喜欢
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    相关资源
    最近更新 更多