【问题标题】:perl - print sql rowperl - 打印 sql 行
【发布时间】:2020-02-29 19:50:12
【问题描述】:

我想打印我的 perl 脚本的所有 sql 结果,我已经连接到数据库,我想显示我的 sql 查询的结果:

MySQL("SELECT * FROM test");

# define subroutine to submit MySQL command
 sub MySQL
 {   
     #Connect to the database.
     my $dbh = DBI->connect("DBI:mysql:database=database;host=ip",
     "login", 'password',
     {'RaiseError' => 1});

     my $query = $_[0];  #assign argument to string

     my $sth = $prepare($query);   #prepare query

     $sth->execute();   #execute query

     while (my @row = $sth->fetchrow_array)
        {
            print "@row\n";
        }
}

我有这个错误:

Global symbol "$prepare" requires explicit package name at test3.pl line 34.
syntax error at test3.pl line 34, near "$prepare("
Global symbol "$sth" requires explicit package name at test3.pl line 36.
Execution of test3.pl aborted due to compilation errors.

【问题讨论】:

标签: linux shell perl


【解决方案1】:

目前我手头没有可用的数据库。以下示例在理论上应该有效。我已经在 fetch_hashref 上替换了 fetch_array,输出将提供有关每一行的信息

ddddd column=value\tcolumn=value\t...

use strict;
use warnings;

my $query = qq(SELECT * FROM tb_test);

db_query($query);

sub db_query {
    my $query = shift;

    my $count = 1;

    my $dbh = DBI->connect(
                    "DBI:mysql:database=database;host=ip",
                    "login", 'password',
                    {'RaiseError' => 1}
              );

    my $sth = $dbh->prepare($query);

    $sth->execute();

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

            print "%5d ", $count++; # rows count

            while( my($k,$v) = each %$row ) { print "%s=%s\t",$k,$v; }

            print "\n"; # we done with current row
    }

    $sth->finish;
    $dbh->disconnect;
}

您需要查看 DBI 文档以全面了解其工作原理。

【讨论】:

    【解决方案2】:

    在您的上一篇文章中,以下评论中只有一个对 e 的引用

    #INNER JOIN events e ON (e.objectid = t.triggerid)
    

    可能最好使用语法INNER JOIN events as e ON (e.objectid = t.triggerid) -- 更具可读性

    【讨论】:

    • 好吧,你已经改变了你的问题[现在删除了一部分]。在原始问题中,您在 SQL 语句中添加了“额外”问题,其中 е 字段已被注释掉——是什么导致了错误。这就是我向您指出错误原因的原因。
    【解决方案3】:

    改变这一行:

    my $sth = $prepare($query);
    

    my $sth = $dbh->prepare($query);
    

    不要忘记在 while 循环之后关闭 $sth$dbh 句柄:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 2019-08-30
      • 1970-01-01
      • 2012-09-20
      相关资源
      最近更新 更多