【问题标题】:Perl + POO and Mysql errorPerl + POO 和 Mysql 错误
【发布时间】:2012-10-02 01:23:40
【问题描述】:

我刚刚学习了 poo,我开始玩 perl,实现了这一点,但我没有得到预期的输出,mysql 有问题吗?还是坏代码?另一件事,同样的查询在控制台和工作台上运行,这个模块添加 chmod +x module.pm

#!/usr/bin/perl
use warnings;
use strict; 
use DBI;
use DBD::mysql;
package MysqlTest;

sub new{
    my $class = shift;
    my $query={};
    bless($query, $class);
}
sub conexion{
    my $self=shift;
    my($database, $host, $user, $pwd)=@_;
    my $connect = DBI->connect("DBI:mysql:$database:$host", $user, $pwd) or die $DBI::errstr;;
    $self->{"host"}="$host";
    $self->{"database"}="$database";
    $self->{"user"}="$user";
    $self->{"pass"}="$pwd";
    my $mysqlopen = 1;
return;
}
sub consulta{
    my $self=shift;
    if (!$mysqlopen) { &conexion; }
    my $id = "SELECT * FROM save_bookmarks WHERE id='123'";
    $result = $connect->prepare($id);
    $result->execute();
    my @resultado = $result->fetchrow_array();
    print "@resultado\n";
    return;
}
sub datos{
    my $self=shift;
    print "::DATOS DE ACCESO::\n";
    while (($key, $value)=each(%$self)){
        print "$key => $value\n";
    }
}
1;

此文件称为方法并创建对象。添加到 chmod +x file.pl ,但我不知道,什么不起作用?

#!/usr/bin/perl

use MysqlTest;
use warnings;
use strict;

my $mysqltest = MysqlTest->new();
$mysqltest->conexion("bookmarks", "localhost", "root", "pass");
$mysqltest->consulta();

控制台输出

DBI connect(':','',...) failed: Access denied for user 'delkav'@'localhost' (using password: NO) at MysqlTest.pm line 17.
Access denied for user 'delkav'@'localhost' (using password: NO) at MysqlTest.pm line 17.

有什么想法吗?

【问题讨论】:

  • 在日志消息中用户是“delkav”,但在代码中它是“root”——这是为什么呢?
  • 并更改 mysql 中的密码 ...但现在代码中出现新错误!
  • 完全重复并​​接受答案:stackoverflow.com/questions/12656212/…
  • @opmeitle,请勿重复发帖
  • 主题相似,不同的主题,除了我想删除它以使其不'重复',但他不会让我!

标签: mysql perl


【解决方案1】:

OO 本身是正确的。

错误消息来自 MySQL,拒绝用户“delkav”的访问,但我要连接的用户是“root”。

无论如何,您的 DBI->connect() 行似乎是错误的。要关注DBD::mysql docs,您必须更改您的线路:

my $connect = DBI->connect("DBI:mysql:$database:$host", $user, $pwd) or die $DBI::errstr;

my $connect = DBI->connect("DBI:mysql:database=$database;host=$hostname;", $user, $pwd) or die $DBI::errstr;

【讨论】:

  • 解决它,但更改 mysql root pass,现在问题在第 31 行 -> 无法在 MysqlTest.pm 第 31 行对未定义值调用方法“prepare”。 -> 我们的 $result = $connect->prepare($id); ???并为您在行前编写代码..
  • 在 MysqlTest.pm 第 18 行的连接 (.) 或字符串中使用未初始化的值 $database。在 MysqlTest.pm 第 18 行的连接 (.) 或字符串中使用未初始化的值 $hostname。可以t 在 MysqlTest.pm 第 28 行对未定义的值调用方法“prepare”。
猜你喜欢
  • 2013-12-16
  • 1970-01-01
  • 2014-12-12
  • 2013-12-09
  • 2019-02-09
  • 2018-03-25
  • 2011-12-22
  • 2016-02-09
  • 2015-08-21
相关资源
最近更新 更多