MySQL Perl API.docx
《MySQL Perl API.docx》由会员分享,可在线阅读,更多相关《MySQL Perl API.docx(9页珍藏版)》请在冰豆网上搜索。
MySQLPerlAPI
MySQLPerlAPI
本节记载了PerlDBI接口。
以前的接口被称为mysqlperl。
因为DBI/DBD现在是推荐的Perl接口,mysqlperl是过时的并且不在这里记载。
1DBI与DBD:
:
mysql
DBI是对于很多数据库的一个通用接口。
这意味着你能编写一个脚本,不用改变就能工作于很多数据库引擎。
你需要为每种数据库类型定义了的一个数据库驱动程序(DBD)。
对于MySQL,该驱动程序称为DBD:
:
mysql。
有关Perl5DBI的更多信息,请访问DBI网页并且阅读文档:
http:
//www.symbolstone.org/technology/perl/DBI/index.html
关于在Perl5定义的面向对象的编程(OOP)的更多信息,参见PerlOOP页:
对于MySQLPerl支持的安装指令在4.10Perl安装说明中给出。
2DBI接口
可移植的DBI方法
connect
建立到一个数据库服务器的连接
disconnect
断开数据库服务器的连接
prepare
准备执行一个SQL语句
execute
执行准备好的语句
do
准备并执行一个SQL语句
quote
加引号于要插入的字符串或BLOB值
fetchrow_array
作为一个字段数组取出下一行
fetchrow_arrayref
作为一个字段的引用数组取出下一行
fetchrow_hashref
作为一个哈希表的引用取出下一行
fetchall_arrayref
作为一个字段数组取出所有数据
finish
完成一条语句并且让系统释放资源
rows
返回受影响的行数
data_sources
返回可在localhost上得到的数据库的数组
ChopBlanks
控制fetchrow_*方法是否剥去空格
NUM_OF_PARAMS
在准备的语句中的占位(placeholder-参数)的数目
NULLABLE
其列可以是NULL
trace
执行调试跟踪
MySQL特定的方法
insertid
最后一个AUTO_INCREMENT值
is_blob
该列是BLOB值
is_key
该列是键
is_num
该列是数字的
is_pri_key
该列是主键
is_not_null
该列不能是NULL,见NULLABLE。
length
最大可能的列大小
max_length
结果中实际上存在的最大列大小
NAME
列名字
NUM_OF_FIELDS
返回的字段数目
table
在返回的集合中的表名
type
所有的列类型
Perl方法在下一节更详细地描述。
用于方法返回值的变量有这些含义:
$dbh
数据库句柄
$sth
语句句柄
$rc
返回代码(经常是一个状态)
$rv
返回值(经常是一个行数)
可移植DBI方法
connect($data_source,$username,$password)
使用connect方法使得一个数据库连接到数据源。
$data_source值应该以DBI:
driver_name:
开始。
以DBD:
:
mysql驱动程序使用connect的例子:
$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)。
对Msql-Mysql-modules版本1.2009,$data_source值允许某些修饰词:
mysql_read_default_file=file_name
读取作为一个选项文件的“filename”。
有关选项文件的信息,见4.15.4选项文件。
mysql_read_default_group=group_name
当读取选项文件时的缺省组通常是[client]组。
通过指定mysql_read_default_group选项,缺省组变成[group_name]组。
mysql_compression=1
在客户和服务器之间使用压缩通信(MySQL3.22.3或以后)。
mysql_socket=/path/to/socket
指定用于与服务器连接的Unix套接字的路径名(MySQL3.21.15或以后)。
可以给出多个修饰词;每一个必须前置一个分号。
例如,如果你想要避免在一个DBI脚本中硬编码用户名和口令,你可以从用户的“~/f”选项文件中取出它们,而不是这样编写你的connect调用:
$dbh=DBI->connect("DBI:
mysql:
$database"
.";mysql_read_default_file=$ENV{HOME}/f",
$user,$password);
这个调用将读取在选项文件中为[client]组而定义的选项。
如果你想做同样的事情,但是也使用未[perl]组指定的选项,你可以使用:
$dbh=DBI->connect("DBI:
mysql:
$database"
.";mysql_read_default_file=$ENV{HOME}/f"
.";mysql_read_default_group=perl",
$user,$password);
disconnect
disconnect方法从数据库断开数据库句柄。
它一般就在你从程序退出之前被调用。
范例:
$rc=$dbh->disconnect;
prepare($statement)
准备一条由数据库引擎执行的SQL语句并且返回语句句柄($sth),你可以使用它调用execute方法。
一般地你借助于prepare和execute来处理SELECT语句(和类SELECT语句,例如SHOW、DESCRIBE和EXPLAIN)。
范例:
$sth=$dbh->prepare($statement)
ordie"Can'tprepare$statement:
$dbh->errstr\n";
execute
execute方法执行一个准备好的语句。
对非SELECT语句,execute返回受影响的行数。
如果没有行受影响,execute返回"0E0",Perl将它视作零而不是真。
对于SELECT语句,execute只是在数据库中启动SQL查询;你需要使用在下面描述的fetch_*方法之一检索数据。
范例:
$rv=$sth->execute
ordie"can'texecutethequery:
$sth->errstr;
do($statement)
do方法准备并且执行一条SQL语句并且返回受影响的行数。
如果没有行受到影响,do返回"0E0",Perl将它视为零而不是真。
这个方法通常用于事先无法准备好(由于驱动程序的限制)或不需要执行多次(插入、删除等等)的非SELECT语句。
范例:
$rv=$dbh->do($statement)
ordie"Can'texecute$statement:
$dbh->errstr\n";
quote($string)
quote方法被用来“转义”包含在string中的任何特殊字符并增加所需的外部的引号。
范例:
$sql=$dbh->quote($string)
fetchrow_array
这个方法取下一行数据并且作为一个字段值数组返回它。
范例:
while(@row=$sth->fetchrow_array){
printqw($row[0]\t$row[1]\t$row[2]\n);
}
fetchrow_arrayref
这个方法取下一行数据并且作为一个对一个字段值数组的引用返回它。
范例:
while($row_ref=$sth->fetchrow_arrayref){
printqw($row_ref->[0]\t$row_ref->[1]\t$row_ref->[2]\n);
}
fetchrow_hashref
这个方法取一行数据并且返回包含字段名/值对的一个哈希表的一个引用。
这个方法不如使用上述数组引用那样有效。
范例:
while($hash_ref=$sth->fetchrow_hashref){
printqw($hash_ref->{firstname}\t$hash_ref->{lastname}\t\
$hash_ref->title}\n);
}
fetchall_arrayref
这个方法被用来获得从SQL语句被返回的所有数据(行)。
它返回一个数组的引用,该数组包含对每行的数组的引用。
你用一个嵌套循环来存取或打印数据。
范例:
my$table=$sth->fetchall_arrayref
ordie"$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
返回由最后一条命令改变(更新、删除等)的行数。
这通常用在非SELECT的execute语句之后。
范例:
$rv=$sth->rows;
NULLABLE
返回一个对一个布尔值数组的引用;对数组的每个成员,一个TRUE值表示该列可以包含NULL值。
范例:
$null_possible=$sth->{NULLABLE};
NUM_OF_FIELDS
这个属性表明由一条SELECT或SHOWFIELDS语句返回的字段数目。
你可以用它检查一条语句是否返回了结果:
一个零值表明一个象INSERT、DELETE或UPDATE的非SELECT语句。
范例:
$nr_of_fields=$sth->{NUM_OF_FIELDS};
data_sources($driver_name)
这个方法返回一个数组,它包含在主机'localhost'上的MySQL服务器可得到的数据库名。
范例:
@dbs=DBI->data_sources("mysql");
ChopBlanks
这个属性确定fetchrow_*方法是否将去掉返回值的头和尾的空白。
范例:
$sth->{'ChopBlanks'}=1;
trace($trace_level)
trace($trace_level,$trace_filename)
trace方法开启或关闭跟踪。
当作为一个DBI类方法调用时,它影响对所有句柄的跟踪。
当作为一个数据库或语句句柄方法调用时,它影响对给定句柄的跟踪(和句柄的未来子孙)。
设置$trace_level为2以提供详细的踪迹信息,设置$trace_level为0以关闭跟踪。
踪迹输出缺省地输出到标准错误输出。
如果指定$trace_filename,文件以添加模式打开并且所有跟踪的句柄的手被写入该文件。
范例:
DBI->trace
(2);#traceeverything
DBI->trace(2,"/tmp/dbi.out");#traceeverythingto/tmp/dbi.out
$dth->trace
(2);#tracethisdatabasehandle
$sth->trace
(2);#tracethisstatementhandle
你也可以通过设置DBI_TRACE环境变量开启DBI跟踪。
将它设置为等价于调用DBI->(value)的数字值,将它设置为等价于调用DBI->(2,value)的路径名。
MySQL特定的方法
下面显示的方法是MySQL特定的并且不是DBI标准的部分。
他们中有几个现在不建议使用:
is_blob、is_key、is_num、is_pri_key、is_not_null、length、max_length和table。
这些已有DBI标准的另一种方法存在,他们在下面说明。
insertid
如果你使用MySQL的AUTO_INCREMENT功能,新的自动加1的值将存储在这里。
范例:
$new_id=$sth->{insertid};
作为另一种选择,你可以使用$dbh->{'mysql_insertid'}。
is_blob
返回一个对一个布尔值数组的引用;对数组的每个单元,一个TRUE值表明相应的列是一个BLOB。
范例:
$keys=$sth->{is_blob};
is_key
返回一个对一个布尔值数组的引用;对数组的每个单元,一个TRUE值表明相应的列是键。
范例:
$keys=$sth->{is_key};
is_num
返回一个对一个布尔值数组的引用;对数组的每个单元,一个TRUE值表明相应的列包含数字值。
范例:
$keys=$sth->{is_key};
is_pri_key
返回一个对一个布尔值数组的引用;对数组的每个单元,一个TRUE值表明相应的列是主键。
范例:
pri_keys=$sth->{is_pri_key};
is_not_null
返回一个对一个布尔值数组的引用;对数组的每个单元,一个FALSEE值表明该列可以包含NULL值。
范例:
$not_nulls=$sth->{is_not_null};
is_not_null不建议使用;最好使用NULLABLE属性(在上面描述了),因为那是一个DBI标准。
length
max_length
这些方法的每个返回一个对列大小数组的引用。
length数组指出每列可以有的最大可能的尺寸(如在表描述中声明的)。
max_length数组指出在结果表中实际存在的最大尺寸。
范例:
$lengths=$sth->{length};
$max_lengths=$sth->{max_length};
NAME
返回一个对一个列名数组的引用。
范例:
$names=$sth->{NAME};
table
返回一个对一个表名数组的引用。
范例:
$tables=$sth->{table};
type
返回一个对一个列类型数组的引用。
范例:
$types=$sth->{type};
3更多的DBI/DBD信息
你可以使用perldoc命令得到更多的关于DBI的信息。
perldocDBI
perldocDBI:
:
FAQ
perldocDBD:
:
mysql
你也可以使用pod2man、pod2html等工具转换到其他格式。