如果启用R a i s e E r r o r(设为非零值),如果在DBI 方法中出现错误,则DBI 调用die( )来显示一条消息并且退出。
如果启用P r i n t E r r o r,在出现DBI错误时,DBI 会调用warn( ) 来显示一条消息,但是相应脚本会继续执行。
缺省时, RaiseError 是禁用的,而PrintError 启用。在此情况下,如果connect( )调用失败,则DBI 显示一条消息,而且继续执行。这样,如果省略connect( ) 的四个参数,则得到缺省的错误处理行为,可以如下检查错误:
$dbh=DBI->connect($dsn,$user_name,$password) or exit (1);
如果出现错误,则connect( ) 返回undef 表示失败,并且触发对exit( ) 的调用。因为DBI已经显示了错误消息,所以您就不一定要显示它了。
如果明确给出该错误检查属性的缺省值,可如下调用connect( )。
$dbh=DBI->connect($dsn,$user_name,$password,{RaiseError=>0,PrintError=>1})
or exit (1);
这就需要更多的编写工作,但是即使对不经意的读者,处理错误行为也会更为明显。
如果想自己检查错误,并显示自己的消息,应该禁用RaiseError 和P r i n t E r r o r:
变量$DBI::err 和$ DBI : :er r s t r,只用于所显示的die( ) 调用中,有助于构造错误消息。它们含有MySQL错误代码和错误字符串,非常像C API 函数中的mysql_errno( ) 和mysql_error( )。
如果仅仅要DBI 处理错误,以便不必自己检查它们,则启用R a i s e E r r o r:
$dbh=DBI->connect ($dsn,$user_name,$password,{RaiseError=>1});
到目前为止,这是最容易的方法,并且是dump_members 带来的。如果在脚本退出时,想要执行某种类型的清除代码,启用RaiseError 可能是不恰当的,尽管在这种情况下,可以重新定义$SIG{_DIE_} 句柄,可以做想做的事情。
避免启用RaiseError 属性的另一个原因是DBI 在它的消息中显示技术信息,如下:
disconnect(DBI::db=HASH(0x197aae4)invalidates 1active statement.Either
destroy statement handles or call finish on them before disconnecting.
对于编程者来说,这是好的信息,但对普通用户可能没有什么意义。在此情形,最好自己检查错误,以便可以显示对期望使用这个脚本的人更有意义的消息。或者也可在这里考虑重新定义$SIG{_DIE_} 句柄。这样可能很有用,因为它允许启用RaiseError 来使错误处理简单化,而不是用自己的消息替换DBI 给出的缺省错误消息。为了提供自己的_DIE_ 句柄,可在执行任何DBI 调用以前,进行下面的工作:
$SIG{_DIE_}=sub{die "Sorry,an error occurred\n";};
也可以用普通的风格定义一个子例程,并利用这个子例程的引用来设置这个句柄值:
除了在connect( ) 调用中逐字传递错误处理属性之外,还可以利用散列定义它们,并传递对这个散列的引用。有人发现以这种方式准备属性设置使脚本更容易阅读和编辑,但是在功能上这两种方法是相同的。下面是一个说明如何使用属性散列的样例:
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] 下一页
Tag:数据库教程,sql数据库教程,access数据库教程,电脑教学 - 数据库教程