【问题标题】:unable to execute mysql query in perl while connecting to remote server连接到远程服务器时无法在 perl 中执行 mysql 查询
【发布时间】:2013-11-21 17:21:52
【问题描述】:

我已连接到一个 MySQL 数据库,该数据库托管在 Perl 的远程服务器中。现在我正在尝试使用 Perl 命令行对 subject.pl 文件中的表执行选择语句。代码是

#!/usr/bin/perl

use DBI;
use strict;

# Connected to mysql audit database in dev server
my $dsn = 'DBI:mysql:Driver={mysql}';
my $host = 'dev-mysql.learn.local';
my $database = 'subject';
my $user = 'testUser';
my $auth = 'testPassword';
my $dbh = DBI->connect("$dsn;host=$host;Database=$database",$user,$auth) or die            "Database connection not made: $DBI::errstr";

# Prepare query
my $sql = "SELECT
        subject_id
        ,subject_value
    FROM
        subject";
my $sth = $dbh->prepare($sql);

#Execute the statement
$sth->execute() or die "Unable to execute".$sth->errstr;

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

$sth->finish();

我在$sth->execute() or die "Unable to execute".$sth->errstr; 行遇到错误

错误信息是Unable to execute at D:\Demo\perl_demo\subject.pl line 24.

但是当我打印 $dbh 变量时,它给出的结果类似于DBI::db=HASH(0x1ca7884)。所以我想连接正在正确建立。

请帮我解决这个问题,因为我是 Perl 脚本的新手。

【问题讨论】:

  • 你检查$dbh->prepare($sql)的返回值了吗?
  • 你肯定有连接,否则它会在连接时死掉 (connect.. or die ..)
  • 是的弗兰克,我检查了$dbh->prepare($sql)的返回值。它给DBI::db=HASH(0x1ca74f4)

标签: mysql perl


【解决方案1】:

检查prepare 上的错误,

my $sth = $dbh->prepare($sql) or die $dbh->errstr;

【讨论】:

  • 我已经检查过你的代码。但它没有抛出任何错误。当我打印 $sth 变量时,其给出的结果类似于 DBI::db=HASH(0x1ca74f4)
  • @KanhuCharanSahu 奇怪的是$sth->execute() or die $sth->errstr; 没有报告实际的错误信息?
  • 是远程数据库的原因吗?
  • @KanhuCharanSahu 不,DBI 在出现故障时应该总是有错误消息。
  • @KanhuCharanSahu 您可以将{RaiseError => 1} 设置为connect 的第四个参数
猜你喜欢
  • 2017-06-26
  • 2016-12-25
  • 1970-01-01
  • 2019-05-13
  • 2013-02-24
  • 2016-10-21
  • 1970-01-01
  • 2014-03-04
相关资源
最近更新 更多