D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
blackhat.pw
:
/
kunden
/
lib
/
susshi
/
exec
/
Susshi
/
Filename :
DB.pm
back
Copy
package Susshi::DB; use warnings; use strict; use DBI; sub new { my $class = shift; my %args = @_; my $self = {}; foreach my $key ( qw (username userpassword databasehost databasename) ) { $self->{$key} = delete $args{$key} or die "Missing mandatory option $key"; } $self->{databasesocket} = delete $args{databasesocket}; $self->{tablefilter} = delete $args{tablefilter} // ''; return bless $self, $class; } sub _get_dsn { my $self = shift; if (! $self->{_dsn}) { $self->{_dsn} = sprintf 'dbi:mysql:database=%s;hostname=%s', $self->{databasename}, $self->{databasehost}; $self->{_dsn} .= ';mysql_socket=' . $self->{databasesocket} if $self->{databasesocket}; } return $self->{_dsn}; } sub _get_dbh { my $self = shift; if (! $self->{_dbh}) { $self->{_dbh} = DBI->connect ( $self->_get_dsn, $self->{username}, $self->{userpassword}, { RaiseError => 0, PrintError => 0, } ) or die $DBI::errstr . "\n"; } return $self->{_dbh}; } sub drop_tables { my $self = shift; my ($tbls) = @_; die unless ref $tbls eq 'ARRAY'; my $dbh = $self->_get_dbh; foreach my $tbl (@$tbls) { $dbh->do('DROP TABLE ' . $dbh->quote_identifier($tbl)); } } sub get_mysql_args { my $self = shift; my @mysql_args=( '--host=' . $self->{databasehost}, '--user=' . $self->{username}, '--password=' . $self->{userpassword}, $self->{databasename}, ); push @mysql_args, '--socket=' . $self->{databasesocket} if $self->{databasesocket}; return @mysql_args; } sub get_tables { my $self = shift; my $size = 0; my @tables = (); my $prefix = $self->{tablefilter}; my $dbh = $self->_get_dbh; my $query = 'SHOW TABLE STATUS'; if ($prefix) { $query .= ' LIKE ' . $dbh->quote($prefix . '%'); } my $sth = $dbh->prepare($query); $sth->execute; while (my $t = $sth->fetchrow_hashref()) { $size += $t->{Index_length} + $t->{Data_length}; push @tables, $t->{Name}; } return $size, \@tables; } 1;