2012-09-29 32 views
0

我剛剛學會便便和我有使用Perl的發揮,取得了這一點,但我沒有得到預期的輸出,問題與MySQL?或錯誤的代碼?其他的事情,同樣的查詢上的控制檯和工作臺運行,該模塊添加使用chmod + X module.pm的Perl + POO和MySQL錯誤

#!/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)[email protected]_; 
    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. 

任何想法輸出?

+0

在用戶在「delkav」日誌消息,但在它的代碼是「根」 - 這是爲什麼? –

+0

並在mysql中更改passwd ...但現在代碼中出現新錯誤! – opmeitle

+0

精確公認的答案重複:http://stackoverflow.com/questions/12656212/perl-module-inherente-dbi-cant-call-method-prepare-error – memowe

回答

2

OO本身是正確的。

錯誤消息來自MySQL的,拒絕爲用戶'delkav的訪問,但我要與連接的用戶是「根」。

無論如何,看來你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; 
+0

解決它,但改變了mysql根傳遞,現在問題是在第31行 - >無法調用方法「準備」在MysqlTest.pm第31行未定義的值。 - >我們的$結果= $ connect-> prepare( $ ID); ???併爲你的代碼行前..在MysqlTest.pm線連接(。)或字符串 – opmeitle

+0

使用未初始化值$數據庫18 在MysqlTest.pm線18使用未初始化值$主機的連接()或字符串。 無法在MysqlTest.pm第28行的未定義值上調用方法「準備」。 – opmeitle