十一、断开服务器的连接
使用连接完成所有任务后,应该立即关闭它:
调用disconnect()方法之后,$conn就不能再作为连接对象使用了。
十二、更多的错误处理
PEAR为脚本开发者提供了控制PEAR错误处理的能力。默认情况下,PEAR调用返回的错误对象。一方面,这使您可以用错误信息做任何事情,例如显示一个错误信息;但是另一方面也将检查所有调用的结果的任务都甩给了我们。不过,我们还有其他处理方式。举例来说,如果我们不想测试所有调用的结果,那么可以将错误处理模式设为PEAR_ERROR_DIE,这样的话,当发生错误时,PEAR会自动显示一个错误信息和终止脚本。为了给连接对象设置错误处理模式,需要调用setErrorHandling(),代码如下所示:
设置好错误处理模式之后,只要提交语句的时候发生错误,我们的脚本就会退出。换言之,我们可以假设,如果$conn->query()返回的话,表明它成功了,所以无需测试结果。需要注意的是,这里setErrorHandling()是作为连接对象的方法来调用的,所以在持有一个有效的连接的时候才能调用它;换句话说,我们无法使用它来捕获在尝试连接期间发生的错误。如果希望俘获所有的PEAR错误,包括connect()调用失败的错误,那么就需要将setErrorHandling()作为PEAR类的方法来调用,如下所示:
十三、移植注意事项
将PEAR DB脚本移植到其它类型的数据库的时候,最理想的情形就是只需修改传给connect()调用的DSN字符串。举例来说,如果我们有一个MySQL脚本,现在想移植到PostgreSQL上,只把DSN字符串改为符合PostgreSQL驱动程序的要求就行了。 然而,PEAR DB对无法移植到其他数据库引擎的SQL却无能为力。举例来说,如果我们使用了MySQL的AUTO_INCREMENT特性来生成序列数,那么这种SQL语法是无法移植到其它数据库的。 有时候,可以使用PEAR级别的构造来避免SQL级别的不可移植性。就序号生成而言,PEAR DB模块提供了一个生成序号的工具,而该工具根本不涉及SQL。其底层实现细节都被驱动程序隐藏了起来。
通过在与特定引擎有关的函数之上添加一个抽象层,PEAR DB为开发人员隐藏了所有与特定数据库有关的细节,从而为开发人员提供了一个统一接口。这极大的简化了开发人员的工作,但是也为底层实现增加了复杂性。所以,在使用PEAR DB时,其效率要比直接使用本地数据库访问函数低一些。