【问题标题】:Perl and MySQL user input to select a row?Perl 和 MySQL 用户输入选择一行?
【发布时间】:2015-04-26 19:24:18
【问题描述】:

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

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

然后有一个<STDIN>,例如,3 来选择企鹅。 3 只是执行 select 调用时出现的行号。

有什么方法可以做到这一点,还是只能通过关联的 id 键和随后的 select 语句匹配该 id 键?

【问题讨论】:

  • 现在你知道为什么每个表都应该有一个主键 :-)

标签: mysql perl


【解决方案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;

【讨论】:

  • 谢谢,这就是我要找的。没有足够的声望来支持你,抱歉。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    只需使用查询:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 2016-06-13
      • 2020-02-15
      • 2013-10-06
      相关资源
      最近更新 更多