【问题标题】:Why does my Perl script hang while trying to connect to a database using DBI?为什么我的 Perl 脚本在尝试使用 DBI 连接到数据库时挂起?
【发布时间】:2014-07-07 18:48:20
【问题描述】:

我的连接字符串是:

use strict;
use DBI;

my $dbh = DBI->connect("DBI:mysql:database=[DB];host=[HOST]","[USERNAME]", "[PASSWORD]",{'RaiseError' => 1});

当我运行脚本时,什么都没有发生 - 它没有显示任何错误,我必须CTRL+C来中断操作。

  • Perl v5.10.1
  • DBI 1.52 版
  • DBD::mysql 版本 3.0007
  • MySQL - 版本?

有什么想法吗?

【问题讨论】:

  • 诊断您的问题需要更多信息。就在我的头上。你的 perl 版本是什么?你的 DBI 版本是多少?您的数据库服务器规格是什么?等等。我相信您也可以提供更多相关信息。
  • Perl 5.10.1 和最新的 DBI...服务器规格是什么意思?这是 MySQL - 你还需要知道什么?
  • 如果将mysql_connect_timeout=5(或类似名称)附加到 DSN 会发生什么?
  • @pilcrow - 我不知道该怎么做 - 你能给我代码示例吗?
  • 您能否在运行脚本的同一台机器上使用 mysql 客户端连接到数据库?

标签: mysql perl runtime-error dbi


【解决方案1】:

为什么不为connect()方法的参数指定详细的字符串? 确保您的数据库运行正常。 如下图:

use strict;
use DBI;
my $user = "root";
my $passwd = "123456";
my $data_source = "dbi:mysql:test_db";
my $dbh = DBI->connect($data_source,$user,$passwd, {RaiseError => 1})
                or die "Can't connect to $data_source: $DBI::errstr";

【讨论】:

  • 我在实际脚本中包含它们,但出于安全原因将它们保留在此站点之外......无论如何,谢谢
【解决方案2】:

您需要将 DB、HOST、USERNAME 和 PASSWORD 替换为本地设置的实际值。首先确保您可以使用这些凭据从命令行连接到 mysql

【讨论】:

  • 感谢您的帮助,但出于安全原因,我只是将它们排除在外,哈哈……无论如何,谢谢
猜你喜欢
  • 2017-10-10
  • 2012-05-13
  • 1970-01-01
  • 2020-01-03
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多