设为首页 收藏本站
查看: 879|回复: 0

[经验分享] Perl类操作mysql

[复制链接]

尚未签到

发表于 2015-12-25 15:48:18 | 显示全部楼层 |阅读模式
  
  最近公司需要用Perl做自动化,才学了两三周的Perl,所以代码贴出来写的不好不要笑。正好碰到一个处理Mysql的需求,按照以前的习惯,将几个操作简单整合一下,以防日后之需。
  下面使用DBI访问Mysql的一个类。
  1.new  实例化一个类
  2.query  执行一个查询操作
  3.do  执行一条sql语句(update,delete, insert)
  4.execMultiSql  执行带占位符的语句(insert into user(name,age) values(?,?); )
  5.各种,set,get方法



#!/user/bin/perl -w
package Perl4Mysql;
use strict;
use DBI;
use Data::Dumper;

sub new { #host, dbname, user, password, port
my $class = shift;
my ($host, $dbName, $user, $password, $port) = @_;
$host = "localhost" if !defined($host) or $host eq "";
$dbName = "mysql" if !defined($dbName) or $dbName eq "";
$user = "root" if !defined($user) or $user eq "";
$password = "" if !defined($password) or $password eq "";
$port = 3306 if !defined($port);
my $self = {
"host"=>$host,
"database"=>$dbName,
"user"=>$user,
"password"=>$password,
"port"=>$port
};
bless $self, $class;
return $self;
}
sub query { #sql string for select
my ($self, $sql) = @_;
my @result;
my ($database,$host, $user,$password,$port) = (
$self->{database},
$self->{host},
$self->{user},
$self->{password},
$self->{port}
);
my $dbh = DBI->connect("DBI:mysql:database=$database;host=$host;port=$port", $user, $password)
or die "Can't connect to database: $DBI::errstr\n";    #连接数据库
my $sth = $dbh->prepare($sql);                        #准备
$sth->execute();                                #执行
while(my @res = $sth->fetchrow_array())    {
push @result, \@res;
}                                                #打印抽取结果
$sth->finish;                                    #结束句柄
$dbh->disconnect;                                #断开
return \@result;
}
#执行一条语句
sub do {
my ($self, $sql) = @_;
my ($database,$host, $user,$password,$port) = (
$self->{database},
$self->{host},
$self->{user},
$self->{password},
$self->{port}
);
my $dbh = DBI->connect("DBI:mysql:database=$database;host=$host;port=$port",
$user,
$password)
or die "Can't connect to database: $DBI::errstr\n";    #连接数据库
my $rows = $dbh->do($sql) or die "Can't execute $sql: $dbh->errstr\n";
#    $dbh->commit or die "commit error :$dbh->errstr\n";
$dbh->disconnect;                                #断开
return $rows;
}
#执行多条带占位符(?)的sql
sub execMultiSql {
my ($self, $sql, $params) = @_;
my ($database,$host, $user,$password,$port) = (
$self->{database},
$self->{host},
$self->{user},
$self->{password},
$self->{port}
);
my $dbh = DBI->connect("DBI:mysql:database=$database;host=$host;port=$port",
$user,
$password)
or die "Can't connect to database: $DBI::errstr\n";    #连接数据库
my $sth = $dbh->prepare($sql);
my $rows = 0;
eval {
foreach my $ref_param (@{$params})
{
$rows += $sth->execute(@{$ref_param});
}
$sth->finish;
$dbh->disconnect;                                #断开
    };
if($@) {
print "an error: $@,continue... \n";
$dbh->rollback;
$sth->finish;
$dbh->disconnect;
return 0;
}
return $rows;
}
sub setHost {
my ($self, $host) = @_;
$self->{host} = $host;
}
sub getHost {
my $self = shift;
return $self->{host};
}
sub setDB {
my ($self, $db) = @_;
$self->{database} = $db;
}
sub getDB {
my $self = shift;
return $self->{database};
}
sub getUser {
my $self = shift;
return $self->{user};
}
sub setUser {
my ($self, $user) = @_;
$self->{user} = $user;
}
sub setPassword {
my ($self, $password) = @_;
$self->{password} = $password;
}
sub getPort {
my $self = shift;
return $self->{port};
}
sub setPort {
my ($self, $port) = @_;
$self->{port} = $port;
}

1;
  测试程序如下:



my @param;
my $sqltemp = "insert blog_comment(content, date, userName) values(?, sysdate(), ?);";
my @p1 = ("this is ime.", "ok");
my @p2 = ("okokla, yoin.","jack");
push @param, \@p1;  #将两个参数以引用放入进去
push @param, \@p2;
my $rows = $mysql->execMultiSql($sqltemp, \@param);
print $rows;

my $ref_result = $mysql->query("select count(*) from blog_comment");
print Dumper($ref_result);
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-156310-1-1.html 上篇帖子: Perl getopts 下篇帖子: Perl One-liners学习笔记3
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表