1

私はうんちを学び、perlで遊んで、これを達成しましたが、期待される出力が得られません、mysqlの問題ですか?または悪いコード?他に、同じクエリがコンソールとワークベンチで実行され、このモジュールはchmod +xmodule.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.

何か案が?

4

1 に答える 1

3

オブジェクト指向自体は正しいです。

エラー メッセージは 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;
于 2012-09-29T15:00:27.650 に答える