我试图从数据库中进行简单的选择,问题是我希望相同的脚本能够选择其中的任何表。我已经解决了所有问题,直到我需要将列绑定到变量,因为它们必须动态生成我不知道该怎么做。
这里是代码:
if($op eq "SELECT"){
if ($whr){
$query1 = "SELECT $colsf FROM $tab WHERE $whr";
}else{
$query1 = "SELECT $colsf FROM $tab";
}
$seth = $dbh->prepare($query1);
$seth->execute();
foreach $cajas(@columnas){
$seth->bind_col(*$dynamically_generated_var*);
}
print $q->br();
print $q->br();
print $q->br();
变量@columans
包含所选列的名称(变化很大),我需要为$seth->bind_col()
上的每个列分配一个变量。
我怎样才能实现这个目标?
答案 0 :(得分:2)
使用{
"where_to_buy": true,
"spec_sheet": true,
"dwg_access": true,
"bim_access": true,
"product_prices": true,
"portal_access": true,
"save_quote": true,
"request_drawings": true,
"place_order": true,
"special_offer": true
}
不会在这里获得任何好处。正如您已经想到的那样,用于将固定数量的结果绑定到一组变量。但是你没有固定的设置。
用来思考哦,我可以动态地创建它们是一个非常常见的错误。它会让你into all kinds of trouble later。 Perl有一个专门针对这个用例的数据结构:哈希。
DBI内置了许多函数,用于在bind_col
之后检索数据。其中之一是fetchrow_hashref
。它将结果作为哈希引用返回,每列一个键,一次一行。
execute
我们假设结果如下:
while (my $res = $sth->fetchrow_hashref) {
p $res; # p is from Data::Printer
}
您可以通过说出$res = {
id => 1,
color => 'red',
}
来访问颜色。 perlref和perlreftut上的perldocs有很多关于此的信息。
请注意,命名语句句柄变量的最佳做法是$res->{color}
。
在您的情况下,您有一个动态的列数。这些必须以$sth
的格式加入。我猜你已经在col1, col2, col3
做过了。该表格在$colsf
中非常明显,因此我们只剩下$tab
。
这部分很棘手。这对always sanitize your input,非常重要,尤其是在CGI环境中。使用DBI,最好使用占位符。他们将为您提供所有逃生服务,并且易于使用。
$whr
现在我们不需要关心颜色是my $sth = $dbi->prepare('select cars from garage where color=?');
$sth->execute($color);
,red
还是blue
,这可能会破坏。如果它非常动态,请改用$dbi->quote
。
让我们把它放在你的代码中。
' and 1; --