MySQL Perl API
本节记载了Perl DBI接口。以前的接口被称为mysqlperl。因为DBI/DBD现在是推荐的Perl接口,mysqlperl是过时的并且不在这里记载。
1 DBI与DBD::mysql
DBI是对于很多数据库的一个通用接口。这意味着你能编写一个脚本,不用改变就能工作于很多数据库引擎。你需要为每种数据库类型定义了的一个数据库驱动程序(DBD)。对于MySQL,该驱动程序称为DBD::mysql。
有关Perl5 DBI的更多信息,请访问DBI网页并且阅读文档:
/technology/perl/DBI/index.html
关于在Perl5定义的面向对象的编程(OOP)的更多信息,参见Perl OOP页:
language.perl/info/documentation.html
对于MySQL Perl支持的安装指令在4.10 Perl安装说明中给出。
2 DBI接口
可移植的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 mysql需要安装documentation | 最大可能的列大小 |
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
在客户和服务器之间使用压缩通信(MySQL 3.22.3或以后)。
mysql_socket=/path/to/socket
指定用于与服务器连接的Unix套接字的路径名(MySQL 3.21.15或以后)。
可以给出多个修饰词;每一个必须前置一个分号。例如,如果你想要避免在一个DBI脚本中硬编码用户名和口令,你可以从用户的“~/.myf”选项文件中取出它们,而不是这样编写你的connect调用:
$dbh = DBI->connect("DBI:mysql:$database"
. ";mysql_read_default_file=$ENV{HOME}/.myf",
$user, $password);
这个调用将读取在选项文件中为[client]组而定义的选项。如果你想做同样的事情,但是也使用未[perl]组指定的选项,你可以使用:
$dbh = DBI->connect("DBI:mysql:$database"
. ";mysql_read_default_file=$ENV{HOME}/.myf"
. ";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)
or die "Can't prepare $statement: $dbh->errstr\n";
execute
execute方法执行一个准备好的语句。对非SELECT语句,execute返回受影响的行数。如果没有行受影响,execute返回"0E0",Perl将它视作零而不是真。对于SELECT语句,execute只是在数据库中启动SQL查询;你需要使用在下面描述的fetch_*方法之一检索数据。范例:
$rv = $sth->execute
or die "can't execute the query: $sth->errstr;
do($statement)
do方法准备并且执行一条SQL语句并且返回受影响的行数。如果没有行受到影响,do返回"0E0",Perl将它视为零而不是真。这个方法通常用于事先无法准备好(由于驱动程序的限制)或不需要执行多次(插入、删除等等)的非SELECT语句。范例:
$rv = $dbh->do($statement)
or die "Can't execute $statement: $dbh- >errstr\n";
quote($string)
quote方法被用来“转义”包含在string中的任何特殊字符并增加所需的外部的引号。范例:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论