0

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();

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

4

2 回答 2

1

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

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

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

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

反而。

于 2013-04-10T20:43:16.077 回答
1

处理您的插入语句,避免 sql 注入:

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

$query_handle->execute('DEFAULT', 'tomatoes$', '4');
于 2013-04-10T20:46:21.290 回答