【问题标题】:How to collecte data from linux server in phpmysql using perl?如何使用 perl 从 php mysql 中的 linux 服务器收集数据?
【发布时间】:2014-10-12 08:36:24
【问题描述】:

我是 PERL 脚本的新手,我想使用 PERL 脚本从 Linux 服务器中的 PHP/MySQL 收集数据。

我已经尝试了一些示例 PERL 代码,它适用于本地环境。

但我需要从另一台 Linux 服务器获取数据:

#!/usr/bin/perl
use DBI;

# connect to MySQL...
$driver= "mysql";
$dsn = "DBI:$driver:database=mms;host=localhost";
$dbh = DBI->connect($dsn, "root", "");

# prepare and execute the SQL statement
$sth = $dbh->prepare("SELECT * FROM dailyproductions");
$sth->execute;

# retrieve the results
while(  my $ref = $sth->fetchrow_hashref() ) {
    print $ref->{'id'};
}
exit;

这段代码在本地工作(localhost),但是当我切换到不同的主机时:

$dsn = "DBI:$driver:database=mms;host=192.168.0.1";

我收到此错误:

DBI connect('database=mms;host=192.168.0.1,'root',...) 失败:主机'admin-

lap' 不允许在 D:\Confidential\Report\mysql.pl 第 7 行连接到此 MySQL 服务器 无法对 D:\Confidential\Report\mysql.pl 第 10 行的未定义值调用方法“prepare”。

我该如何克服这个问题?

【问题讨论】:

  • 您需要更新 MySQL 中的权限以允许'admin-lap'@'192.168.0.1' 连接。见here
  • 你能告诉这个语句如何使用 "$dsn = "DBI:$driver:database=mms;host=192.168.0.1";"
  • 不要混淆 PHPMySQL(一个 MySQL 客户端)和 MySQL(一个数据库服务器)。

标签: php mysql linux perl


【解决方案1】:

您使用的不是“phpmysql”,而是 MySQL。尽量不要混淆这两者。

您的程序有效。你已经确定了这一点。问题在于运行程序的机器和装有 MySQL 数据库服务器的机器之间的 MySQL 连接。这就是您的错误消息所说的内容。

不允许主机 'admin-lap' 连接到这个 MySQL 服务器

您需要更改 MySQL 配置以允许您的主机连接到服务器。您的数据库管理员将能够提供帮助。

我将对您的程序进行修复。你看到第二个错误,关于调用prepare 和未定义的值?那是因为您的程序假定它始终可以连接到数据库。您应该更改它,以便程序在无法建立连接时终止。

$dbh = DBI->connect($dsn, "root", "")
  or die $DBI::errstr;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-17
    • 2016-12-28
    • 2020-06-20
    • 2014-08-20
    • 2019-06-02
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    相关资源
    最近更新 更多