Perl和MySQL用户输入选择一行?

时间:2015-02-24 23:12:10

标签: mysql perl

假设我有一个简单的数据库表,它没有ID_KEY但有一个名称列。我想像这样显示输出

+----+---------+
|    | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | lax     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+

然后有一个<STDIN>喜欢,比方说3选择企鹅。 3只是您执行选择呼叫时显示的行号。

有没有办法做到这一点,或者它是否只能与id关联,然后是与该id键匹配的后续select语句?

3 个答案:

答案 0 :(得分:1)

我一开始误解了你,但我已经接受了。但它没有多大意义,因为当您在Perl程序中输入数字时,您将无法使用MySQL命令行工具,并且无法使用看看要输入的数字..

您需要做的是编写Perl程序,以便打印表中的所有name字段以及行号。然后,您的程序可以从输入动物编号转换为其名称,因为它知道它打印的内容。

这样的事情会起作用。当然,您必须正确设置名称,IP地址和凭据,以便DBI可以连接到数据库。

use strict;
use warnings;

use DBI;

my $dbh = DBI->connect(
    'DBI:mysql:database=animal_test',
    'username',
    'password',
    { RaiseError => 1 },
);

my $names = map @$_, $dbh->selectall_arrayref('SELECT name FROM animals');
for my $i ( 0 .. $#$names ) {
  printf "%3d: %s\n", $i+1, $names->[$i];
}
print "\n";

print "Enter animal number: ";
my $animal = <>;
chomp $animal;

my $name = $names->[$animal-1];

printf "Animal chosen is %s\n", $name;

答案 1 :(得分:0)

选项1 - 如果你想通过整数3找到,你会在数据库中放入一个id字段,因为第3行并不总是来自SQL查询的企鹅。

选项2 - 将数据转储到数组或散列中,并使用索引来查找变量中的项目,而不是从STIN中捕获3时的数据库。

答案 2 :(得分:0)

只需使用查询:

my $select = $dbh->prepare('
SET @id:=0; 
SELECT name, 
       @id = @id+1 
FROM table
');