Как получить результаты запроса MySQL из DBI Perl? - PullRequest
3 голосов
/ 12 сентября 2010

Я делаю следующее, и получаю «1», что, как я полагаю, означает, что утверждение хорошо. Но я бы хотел получить результат.

Что не так?

#!/usr/bin/perl

use strict;
use DBI;

my $host = "test";
my $database = "dd";
my $port = 3306;
my $user = "uuu";
my $pw = "ppp";

my $mysql = DBI->connect("DBI:mysql:database=$database;host=$host;port=$port", $user, $pw)
    or die "Cannot connect to MySQL server\n";

my $m = $mysql->do(qq{select MAX(idvisit) from log_visit});

print $m;

Ответы [ 4 ]

8 голосов
/ 12 сентября 2010
my $m = $mysql->prepare("select MAX(idvisit) from log_visit");
$m->execute() or die "Couldn't execute statement: ".$m->errstr;
print $m->fetch()->[0];
8 голосов
/ 12 сентября 2010

Всегда стоит проверять документацию для функций, с которыми у вас возникают проблемы.

В этом случае документация DBI для "do" гласит:

Подготовка и выполнение одного заявление. Возвращает количество строк затронуто или undef при ошибке.

И, более точно,

Не следует использовать для SELECT заявления, потому что это не возвращает дескриптор оператора (так что вы не можете получить любые данные).

3 голосов
/ 12 сентября 2010

do возвращает количество затронутых строк.Возможно, вы захотите взглянуть на класс statement и, в частности, на функцию execute.

1 голос
/ 12 сентября 2010
my $m = $mysql->selectrow_array(qq{select MAX(idvisit) from log_visit});
...