Perl DBI,如何从ENUM数据类型的mysql表中获取字段?

时间:2014-05-26 21:13:43

标签: perl

我知道如何使用以下命令获取所有字段:

SELECT * FROM 'table_name';  

但不确定如何在创建表时仅提取已分配ENUM datatype的字段。

我找到了答案:

my $dbh=DBI->connect("DBI:mysql:$db:$host", "$db_user", "$db_pwd") or die (print "Can't connect to database $DBI::errstr<br>");

my $sth = $dbh->column_info(undef,undef,'table_name','%') or die $dbh->errstr();

while(my $row = $sth->fetchrow_hashref()){

if ($row->{TYPE_NAME} eq 'ENUM') {
    push(@list, $row->{COLUMN_NAME});
}
}  

$sth->finish();
$dbh->disconnect;

1 个答案:

答案 0 :(得分:0)

您可以使用SHOW COLUMNS检查表格。我不建议每次要从表中提取数据时都运行该查询。

my @enums = ();
my $sth = $dbh->prepare(q{DESC } . $tablename);
$sth->execute or die $dbh->errstr;
while (my $hashref = $sth->fetchrow_hashref) {
    push @enums, $hashref->{Field} if $hashref->{Type} =~ /^enum/;
}
$sth->finish; undef $sth;