本节提供DBI 的背景信息—在编写自己的脚本和支持其他人编写的脚本时,需要这些信息。如果已经熟悉DBI,则可以略过这节,直接跳到7 . 3节“运行DBI”。
DBI 数据类型
从某些方面来说,使用Perl DBI API 类似于使用第6章介绍的C 客户机库。在使用C 客户机库时,主要依靠指向结构或数组的指针来调用函数和访问与MySQL相关的数据。在使用DBI API 时,除了函数称为方法,指针称为引用外,也调用函数和使用指向结构的指针。
指针变量称为句柄,句柄指向的结构称为对象。
DBI 使用若干种句柄。它们往往通过表7-1所示的惯用名称在DBI 文件中引用。而惯用的非句柄变量的名称如表7 - 2所示。实际上,在本章中,我们并不使用每个变量名,但是,在阅读其他人编写的DBI 脚本时,了解它们是有用的。
表7-1惯用的Perl DBI 句柄变量名
名称 | 说明 |
$dbh | 数据库对象的句柄 |
$sth | 语句(查询)对象的句柄 |
$fh | 打开文件的句柄 |
$h | “通用”句柄;其意义取决于上下文 |
表7-2 惯用的Perl DBI 非句柄变量的名称
名称 | 说明 |
$rc | 从返回真或假的操作中返回的代码 |
$rv | 从返回整数的操作中返回的值 |
$rows | 从返回行数的操作中返回的值 |
@ary | 查询返回的表示一行值的数组(列表) |
一个简单的DBI 脚本
让我们从一个简单脚本d um p _ member s开始,它举例说明了DBI 程序设计中若干标准概念,如与MySQL服务器的连接和断开、检索数据等。此脚本产生的结果为以制表符分隔形式列出的历史同盟成员。这个格式本身并不让人感兴趣:在这里,了解如何使用DBI 比产生漂亮的输出更为重要。
dump_members 如下:
要想自己试验这个脚本,可以下载它(请参阅符录A),或使用文本编辑器创建它,然后使之可执行,以便能运行。当然,可能至少需要更改一些连接参数(主机名、数据库名、用户名和口令)。本章中的其他DBI 脚本也是这样。在参数缺省时,本章下载脚本的权限设置为只允许读。如果您将自己的MySQL用户名和口令放在它们之中,我建议将它们保留为这种方式,以便其他人不能读取这些值。以后,在7 . 2 . 8节“指定连接参数”中,我们将看到如何从选项文件中获得这些参数,而不是将它们直接放在脚本中。
现在,让我们逐行看完这个脚本。第一行是标准行,指出哪里可以找到Perl 的指示器:
#! /usr/bin/perl
在本章将要讨论的脚本中,每个脚本都包含这行;以后不再说明。此脚本中至少应该含有一个简短的目的说明,这是一个好主意,所以下一行是一个注释,给阅读此脚本的人提供一个关于它做什么的线索:
# dump_members.dump Historical League's membership list
从‘#’字符到行尾部的文本为注释。有必要做一些练习,就是在整个脚本中编写一些注释来解释它们如何工作。
接下来是两个use 行:
use DBI;
use strict;
use DBI 告知Perl 解释程序它需要引入DBI 模块。如果没有这一行,试图在脚本中做与DBI 相关的任何事,都将出现错误。不需要指出想要哪个DBD 级别的模块。在连接数据库时,DBI 会激活相应的模块。
use strict 告知Perl,在使用它们之前需要声明变量。如果没有use strict 行,也可以编写脚本,但是,它有助于发现错误,所以建议始终要包括这行。例如,置为严格模式时,如果声明变量$ my _ v a r,但是之后错误地用$mv_var 来访问,则在运行这个脚本时,将获得下面的消息:
Global symbol "$mv_var" requires explicit package name at line n
这个消息会使您想,“怎么了?$ m v _ v a r?我从未使用过这种名称的变量!”,然后,找到脚本中的第n行,看是什么问题,并改正它。如果不用严格模式, Perl 不会给出$ m v _ v a r;将只是简单地按具有un d e f(未定义的)值的该名称创建一个新的变量,并毫无动静地使用它,然后,您会莫名其妙脚本为什么不工作。
零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。