`
weiyinchao88
  • 浏览: 1184529 次
文章分类
社区版块
存档分类
最新评论

perl处理mysql详解

 
阅读更多
PERL应用数据库由两种方法,其一是利用本身所配置的DBM包,这个可以建立数据库并对其进行操作,因此可以把DBM包以及其他类似的包看作是一个数据库的扩展。另一个就是利用DBI包或者类似的包建立与其他关系型数据库的连接,显然,我们通常需要利用后者。

数据库接口(DBI)是由TIM BUNCE(Tim.Bunce@ig.co.uk)所书写,DBI是专门为PERL所书写。你可以在

http://www.hermetica.com/technologia/DBI/ 查找到相应的信息。

最初,DBI只是由Tim Bunce开发的一个接口包,后来,他开发了DBD::Oracle包用于处理与Oracle的接口。然后,就有了一系列的DBD::Modules的包用于处理与其他类型的数据库的接口。同样,你可以在:

http://www.hermetica.com/technologia/DBI/取得详细的信息。现在可以得到的包有如下:

DBD-Oracle-0.29.tar.gz : Oracle 数据库

DBD-Informix-0.20pl0.tar.gz : Informix 数据库

DBD-QBase-0.03.tar.gz : Quickbase

DBD-mSQL-0.60pl9.tar.gz : mSQL-based 数据库

DBI-0.67.tar.gz : DBI 接口

另外还有ODBC的驱动,从而可以载WINDOWS系统下驱动如ACCESS之类的数据库系统。(当然,PERL FOR WIN32中也有WIN32::ODBC的包用于处理ODBC兼容的驱动程序)

当取回DBI的驱动程序包之后,先不急安装,首先,测试PERL5是否安装,这一点很重要,然后:

如果PERL5已经安装: perl Makefile.PL

如果没有安装:perl Makefile.PL PERL_SRC=/path/to/perl/source/dir

然后:

make

make install完成安装

你可以在系统下执行指令$ PERL_DL_DEBUG=255 perl -e 'use DBI;'

然后可以得到大致如此的结果:

DynaLoader.pm loaded (/usr/local/lib/perl5/i486-linux/5.003 /usr/local/lib/perl5

/usr/local/lib/perl5/site_perl/i486-linux /usr/local/lib/perl5/site_perl .

/usr/local/lib /usr/local/lib /lib /usr/lib)

DynaLoader::bootstrap for DBI (auto/DBI/DBI.so)

这样说明你的DBI包已经安装成功了。

DBI和DBD包运行的模式如下:



(图:DBI、DBD的工作模式)

让我们看看连接数据发生的典型的过程:

1、载入DBI驱动程序

2、使用DBD连接相应的数据库

3、打开含有SQL指令的游标

4、取回数据集

5、关闭游标

6、关闭数据库连接

7、退出

我们使用DBI之前首先需要声明:

#!/usr/bin/perl -w

use DBI;

我们有两种方法可以建立PERL与数据库之间的连接:

#!/usr/bin/perl -w

use DBI;

#建立与数据库的连接,第4个参数标明数据库类型

$dbh = DBI->connect( 'connection_string', 'username', 'password', 'mSQL' );

if ( !defined $dbh ) {

die "Cannot do /$dbh->connect: $DBI::errstr/n";

}

通过这种方法,返回一个数据库句柄。这是一种常用的用法,另外一种方法返回“驱动程序句柄”:

#!/usr/bin/perl -w

use DBI;

$drh = DBI->install_driver( 'mSQL' );

if ( !defined $drh ) {

die "Cannot load driver: $!/n";

}

这种方法多用来检查是否系统中是否存在某种驱动程序。

在使用中,有三种句柄将要在程序设计中涉及到:驱动程序句柄(Driver Handle)、数据库句柄(DataBase Handle)、语句句柄(Statement Handle),它们之间的关系可以用下图来表示:



(图:驱动程序句柄、数据句柄和语句句柄的工作关系)

以下是一些利用DBI处理数据库的历程:

1、打开连接(数据库)已经关闭

#!/usr/bin/perl -w

#

# (c)1996 Alligator Descartes

#

# inout.pl: Connects and disconnects from a specified database

use DBI;

if ( $#ARGV < 0 ) {

die "Usage: inout.pl /n";

}

# Create new database handle. If we can't connect, die()

$dbh = DBI->connect( '', $ARGV[0], '', $ARGV[1] );

if ( !defined $dbh ) {

die "Cannot connect to mSQL server: $DBI::errstr/n";

}

# Disconnect from the database

$dbh->disconnect;

exit;

二、DBI与DBD::mysql
DBI是一个许多数据库通用的接口,这意味着你可以写出一个可以工作于许多不同的数据库的脚本。为此,你需要一个为每中数据库类型定义的DATABASE DRIVER(DBD),对于MySQL来说,这个驱动程序叫DBD::mysql。你可以参考DBIs web page以获得更多的信息。为了获得在Perl5中的关于面向对象编程的概念,请参考the perl OOP page

三、DBI接口
通用DBI方法

connect
建立与一个数据库服务器的连接

prepare
获取准备执行的SQL语句

do
准备并执行一个SQL语句

disconnect
断开与一个数据库服务器的连接

quote
被插入引用字符串(块)

execute
执行存储过程

fetchrow_array
取出下一行到一个数组之中

fetchrow_arrayref
取出下一行到数组中,返回数组的引用

fetchrow_hashref
取出下一行到哈希表,返回其引用

fetchall_arrayref
取出所有的数据到一个数组,返回其引用。

finish
结束语句、释放系统资源

rows
返回作用的行的数目

data_sources
返回本机中可用的数据库的数组。

ChopBlanks
去除空格

NUM_OF_PARAMS
存储过程中占位符的数目

NULLABLE
哪一个行允许Null。


MySQL 的特殊方法

insertid
最后自动递增的值

is_blob
为BLOB的行

is_key
为键的行

is_num
为数字的行

is_pri_key
为主键的行

is_not_null
不能为NULL的行

length
理论上最大的列的数目

max_length
物理上最大的列的数目

NAME
列名

NUM_OF_FIELDS
返回的字段的数目

table
返回的集中的表的名称

type
行的类型

_CreateDB
创建一个数据库

_DropDB
删除一个数据库



connect:
使用connect方法建立一个到数据源的连接。$data_source应该以DBI:driver_name:开始,例如:
$dbh = DBI->connect("DBI:mysql:$database", $user, $password); $dbh = DBI->connect("DBI:mysql:$database:$hostname", $user, $password); $dbh = DBI->connect("DBI:mysql:$database:$hostname:$port", $user, $password);
如果用户名或者是口令没有定义的话,那么DBI将使用DBI_USER,DBI_PASS环境变量分别作为其值。如果你没有定义主机的话,那么默认的是“localhost”,如果你没有定义端口号的话,以默认的mysql的端口号(3306)作为端口号。

prepare:
通过数据库引擎预备SQL语句并且返回一个语句句柄($sth)用于参与execute方法,例如:
$sth = $dbh->prepare($statement) or die "Can't prepare $statement: $dbh->errstr/n";
do
do方法预备并执行一个SQL语句,返回作用的行的数目,这个方法通常用于非select的语句,同时一般不需要执行多次(例如:insert,delete等)。例如:
$rc = $dbh->do($statement) or die "Can't execute $statement: $dbh- >errstr/n";
disconnect
disconnect将断开与数据库的连接,通常在程序结束的时候使用。例如:
$rc = $dbh->disconnect;
quote
quote方法用于 "escape"任何在字符串中的特定自负,并且加上引用标记。
$sql = $dbh->quote($string)
execute
该方法执行一个存储的语句。对于非select的语句来说,它返回作用的行的数目,对于select语句来说,该方法仅仅是开始了在数据库中查询,你需要fetch_*方法来取回数据。
$rv = $sth->execute or die "can't execute the query: $sth->errstr;
fetchrow_array
这个方法取回下一行的数据,并且将其存储在一个数组之中。例如:
while(@row = $sth->fetchrow_array) { print qw($row[0]/t$row[1]/t$row[2]/n); }
fetchrow_arrayref
这个方法取回下一行的数据,并将其返回在一个对数组的引用之中。例如:
while($row_ref = $sth->fetchrow_arrayref) { print qw($row_ref->[0]/t$row_ref->[1]/t$row_ref->[2]/n); }
fetchrow_hashref
这个方法取回一行数据,并且返回一个到包含了字段名/值的哈希表的引用。这个方法不如使用一个数组引用的方法有效率。例如:
while($hash_ref = $sth->fetchrow_hashref) { print qw($hash_ref->{firstname}/t$hash_ref->{lastname}/t/ $hash_ref- > title}/n); }
fetchall_arrayref
这个方法被用来从一个SQL语句的执行结果中取回所有的数据(行)。它返回一个数组的引用,你可以通过一个循环来打印/显示这些数据。
my $table = $sth->fetchall_arrayref or die "$sth->errstr/n"; my($i, $j); for $i ( 0 .. $#{$table} ) { for $j ( 0 .. $#{$table->[$i]} ) { print "$table->[$i][$j]/t"; } print "/n"; }
finish
指示没有更多的数据可以被取出,你可以通过这个方法释放语句句柄,并且释放系统资源。例如:
$rc = $sth->finish;
rows
返回在(updated,delete等)操作中作用的行的数目。这通常被用在do()或者非select的execute()语句之后。例如:
$rv = $sth->rows;
NULLABLE
返回一个数组的引用,TRUE分别表示这个列可以允许NULL。
$null_possible = $sth->{NULLABLE};
NUM_OF_FIELDS
通过SELECT或者LISTFILEDS语句返回的列的数目。如果数目为0表示一个非SELECT语句的执行,例如,INSERT,DELETE或者UPDATE等。
$nr_of_fields = $sth->{NUM_OF_FIELDS};
data_sources
这个方法返回在localhost中的mysql服务中可用的数据库的数组。
@dbs = DBI->data_sources("mysql");
ChopBlanks
这个方法决定了返回的行中是否去除空格。
$sth->{'ChopBlanks') =1;


insertid
如果你使用了mysql的自动增值的特性,那么最新的自动增值将被存储。例如:
$new_id = $sth->{insertid};
is_blob
返回一个数组的引用,TRUE分别表示所指示的列是BLOB。
$keys = $sth->{is_blob};
is_key
返回一个数组的引用,TRUE分别表示所指示的列是KEY。
$keys = $sth->{is_key};
is_num
返回一个数组的引用,TRUE分别表示所指示的列包含了数字。
$nums = $sth->{is_num};
is_pri_key
返回一个数组的引用,TRUE分别表示所指示的列是一个主键。
$pri_keys = $sth->{is_pri_key};
is_not_null
返回一个数组的引用,FALSE表示这个列可以包含NULL,而你最好使用DBI标准中的NULLABLE属性。
$not_nulls = $sth->{is_not_null};
max_length、length
返回一个指示最大列的尺寸的数组的引用。最大长度是指在结果的表中的最大数值,LENGTH给出了理论上的最大值。
$max_lengts = $sth->{max_length}; $lengts = $sth->{length};
NAME
返回一个列名称的数组的引用。
$names = $sth->{NAME};
table
返回了表名称的数组的引用。
$tables = $sth->{table}; <script language="javascript" src="/imges/showgg2.js" type="text/javascript"></script><script type="text/javascript"><!-- google_ad_client = "pub-9289012034941110"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "text"; google_ad_channel = ""; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_text = "000000"; google_color_url = "333333"; //--></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>
分享到:
评论

相关推荐

    Perl CGI六天入门

    点击index.html就可打开网页进入目录,... 第一天 1.1 Unix环境 1.2 chmod命令 1.3 定位Perl和sendmail 第二天 2.1 使用Emacs 2.2 Perl简介 ...5.2 代码详解 5.3 读取log文件 第六天 6.1 设置口令 6.2 计数器

    MySQL详解

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB ...Linux作为操作系统,Apache 或Ngnix作为Web服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件,因此使

    详解Lamp环境搭建Linux CentOS6.5编译安装mysql5.6

    安装前准备 通过rpm命令检查centos上是否已经安装mysql,然后卸载已经存在的mysql版本 ...[root@localhost src]# yum install gcc gcc-c++ perl 下载mysql5.6安装包,mysql5.6安装包下载地址:http

    MySQL5.6.40在CentOS7 64下安装过程详解

    MySQL5.6.40在CentOS7 64下安装过程 1)卸载之前安装的mysql rm -rf /usr/local/mysql ...yum -y install gcc gcc-c++ cmake ncurses-devel autoconf perl perl-devel 4)下载mysql-5.6.40.tar.gz wget https:/

    MySQL PHP 语法详解及实例代码

    MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP。 在这些语言中,Mysql在PHP的web开发中是应用最广泛。 在本教程中我们大部分实例都采用了PHP语言。 PHP提供了多种方式来访问和操作Mysql数据库记录。...

    Bugzilla安装步骤详解

    在windows环境下安装Bugzilla。需要在自己的机器上配置IIS。之后安装ActivePerl,MySQL以及Bugzilla。 安装过程中请保持网络畅通

    CentOS7编译安装MySQL5.7.24的教程详解

    安装依赖 (1)cmake是新版MySQL的编译工具 sudo yum install gcc gcc-c++ pcre ...sudo yum install perl perl-devel autoconf 安装boost 如果安装的MySQL5.7及以上的版本,在编译安装之前需要安装boost,因为高版本my

    Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解

    PCRE(Perl Compatible Regular Expressions) http://www.pcre.org 是一个Perl库,包括 perl 兼容的正则表达式库。nginx rewrite依赖于PCRE库,所以在安装Tengine前一定要先安装PCRE,最新版本的PCRE可在

    MySQL5.7.10 安装文档教程详解

    yum -y install gcc-c++ ncurses-devel cmake make perl gcc autoconf automake zlib libxml libgcrypt libtool bison 2、安装boost库: 首先先查询是否已经安装过boost rpm -qa boost* 卸载旧boost-*等库: yum -...

    正则表达式的优化全面详解( 三江小渡)

    就像之前写的mysql全面优化详解一样,就是因为这样工具应用十分广泛,所以对这样的工具全面的进行优化策略总结是非常划算的,因为无论你是PHP、Perl、Python、C++、C#、Java等等语言的程序员,你都是有非常大可能用...

    Docker 搭建lamp应用实例详解

    LAMP 指的 Linux(操作系统)、ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和 PHP(有时也是指 Perl 或 Python) 的第一个字母,一般用来建立 web 服务器。 虽然这些开放源代码程序本身并不是专门...

    Linux 6 下编译安装 PHP 5.6实例详解

    语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP以其开发源代码,免费,快捷,跨平台,高效,面向对象,强大的动态图像创建等功能深受广大开发者的喜爱。本文描述基于CentOS ...

    利用docker搭建LAMP运行环境教程详解

    LAMP 指的 Linux(操作系统)、ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和 PHP(有时也是指 Perl 或 Python) 的第一个字母,一般用来建立 web 服务器。 虽然这些开放源代码程序本身并不是专门...

    Linux中文手册

    1.TurboLinux中文手册 ...3.RedHat Linux管理 4.KDE彻底研究(一) 5.Linux系统常见应用软件 6.Turbo Linux 简体中文版安装手记 ...8.XWindow显卡配置通用解决方法 9.Linux中的字型(FONTS)设定 ...49.MySQL中文参考手册

Global site tag (gtag.js) - Google Analytics