Perl - печать строки SQL - PullRequest
       5

Perl - печать строки SQL

0 голосов
/ 04 ноября 2019

Я хочу напечатать все результаты sql моего сценария perl, я подключился к базе данных и хочу показать результат моего запроса 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.

Ответы [ 3 ]

2 голосов
/ 04 ноября 2019

Измените эту строку:

my $sth = $prepare($query);

на

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

и не забудьте закрыть дескрипторы $sth и $dbh после цикла while с помощью:

$sth->finish;
$dbh->disconnect;
0 голосов
/ 05 ноября 2019

У меня нет доступной базы данных в данный момент. Следующий пример должен работать в теории. Я заменил fetch_array на fetch_hashref на выходе будет предоставлена ​​информация о каждой строке

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 документация, чтобы получить полное представление о том, как это работает.

0 голосов
/ 04 ноября 2019

В вашем последнем посте есть только одна ссылка на e в следующем комментарии

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

, вероятно, лучше использовать синтаксис INNER JOIN events as e ON (e.objectid = t.triggerid) - более читабельный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...