【问题标题】:Perl + DBI + REMOTE MySQL ServerPerl + DBI + 远程 MySQL 服务器
【发布时间】:2016-06-04 15:49:33
【问题描述】:

我是编写 Perl 代码的新手,我需要帮助来弄清楚为什么我无法在 Perl 代码中使用 DBI 从我的 linux 桌面连接到远程 MySQL 服务器。 我已经从我的桌面连接到远程 MySQL 服务器,我已经在 DBI 连接行中使用名称或 IP 地址确定了删除 MySQL 服务器,但是,根据下面的错误消息,似乎 DBI 正在尝试连接到本地数据库(不存在),而不是远程数据库:

!/usr/bin/perl -w
use DBI;
use DBD::mysql;
use MySQL;

$DBHOST = "mysqlserver.example.com";
$DBNAME = "anydb";
$DBUSER = "userdb";
$DBPASS = "userdbpwd";
$dsn = "dbi:mysql:database=$DBNAME,host=$DBHOST, port=3306";

my $dbh = DBI->connect("DBI:mysql:database=$DBNAME,host=$DBHOST, port=3306", "$DBUSER", "$DBPASS", \%attr);

运行上面的代码我得到了错误:

DBI 连接失败:无法通过连接本地 MySQL 服务器 套接字'/var/lib/mysql/mysql.sock

我安装了以下 DBI 驱动程序:

DBM ExampleP File Gofer Proxy SQLite Sponge mysql

【问题讨论】:

  • MySQL 模块是什么???
  • 由于您是 Perl 新手,请确保始终在您编写的每个 Perl 文件的顶部包含 use warningsuse strict
  • 您在代码中传递给connect%attr 的定义在哪里?
  • 顺便说一句,你不需要将字符串变量传递为"$DBUSER",你可以简单地删除" "

标签: perl dbi


【解决方案1】:

正如您在 DBD::mysql 的 connect() 方法的 documentation 中看到的那样,DSN 部分应该用分号 (;) 分隔,而不是逗号 (,):

use DBI;

$dsn = "DBI:mysql:$database";
$dsn = "DBI:mysql:database=$database;host=$hostname";
$dsn = "DBI:mysql:database=$database;host=$hostname;port=$port";

$dbh = DBI->connect($dsn, $user, $password);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 2014-07-14
    • 1970-01-01
    • 2011-07-03
    • 2012-09-05
    • 2012-10-01
    • 1970-01-01
    相关资源
    最近更新 更多