我的Perl相当生锈所以请原谅。尝试使用变量编写查询。尝试过重新格式化,似乎无法正确使用它。这是我的代码,不知道我做错了什么。
my $d_var = "$3\n";
my $query="SELECT id FROM `accounts` WHERE (`accounts`.`named` = ?) LIMIT 1";
my $st_h = $db_h->prepare($query);
$st_h->bind_param(1, '$d_var');
$st_h->execute;
my $row = $st_h->fetchrow_array();
答案 0 :(得分:1)
请仔细检查:
my $st_ht->bind_param(1, $d_var);
(我不理解Chris Ledet的DBI Docs。)
第二个想法:
此代码段:
my $v = "nix nix 1001";
print "$v\n";
print '$v\n', "\n";
if ($v =~ m/(nix) (nix) (\d+)/) {
print 'found: ', $3, "\n";
$sth = $dbh->prepare('SELECT * FROM sample01.csv WHERE GRUPPE=?');
$sth->bind_param(1, $3);
$sth->execute;
while(my @row = $sth->fetchrow_array()) {
print '|', join( '|', @row ), "|\n";
}
} else {
print "no match\n";
}
和输出:
DBI: 1.616 DBD::CSV: 0.33
|00000089-6d83-486d-9ddf-30bbbf722583|2011-09-17 16:25:09|1001|
|000004c9-92c6-4764-b320-b1403276321e|2011-11-09 13:52:30|2000|
nix nix 1001
$v\n
found: 1001
|00000089-6d83-486d-9ddf-30bbbf722583|2011-09-17 16:25:09|1001|
应说明:
答案 1 :(得分:1)
不确定为什么你甚至使用bind_param
。在我看来,将额外的值传递给execute
就简单得多了。
my $d_var = "$3\n";
my $query = 'SELECT id FROM accounts` WHERE (`accounts`.`named` = ?) LIMIT 1';
my $st_h = $db_h->prepare($query);
$st_h->execute($d_var);
my $row = $st_h->fetchrow_array();
您是否考虑过切换到DBIx::Class?
答案 2 :(得分:0)
这是什么意思?
my $st_ht->bind_param(1, '$d_var');
没有引入变量,为什么my
?
答案 3 :(得分:0)
我在执行前打印了3美元,并且字符串中包含数据。
我有d_var =" $ 3 \ n"因为变量$ 3是由Regex字符串生成的,并且在没有\ n的情况下似乎无法工作。
尝试过克里斯建议的内容,但无效。
答案 4 :(得分:0)
除了丹所说的(删除单引号)之外,你将你的param绑定到一个可能没有的Statement句柄对象$st_ht->bind_param(...)
它应该是$st_h->bind_param(...)
。