网站主页   操作系统    网络工程    服务器    网页制作    数据库    程序开发    网络安全    办公软件   
  栏目导航
讲座日期: 本周六下午1点30分 抢座
讲座地点: 北大青鸟马甸校区
主讲老师: 王老师 金牌讲师
讲座主题: 网络安全
讲座内容: 检测、防御、黑客信息,如何过滤不安全的网站,如何防御黑客的进攻。
订座电话: 010-82011432/33
  您当前位置:主页 > 网络学院 > 数据库 > MYSQL >

MySQL数据库技术(31)




  6.3 客户机程序2—增加错误检查
    我们的第二个客户机程序将像第一个客户机程序一样,但是将修改它们,考虑错误出现的可能性。“将错误检查作为读者的练习”这样的项目在编程文献中相当常见,这或许是因为检查错误相当令人讨厌。但是,我赞同这种观点,即MySQL 客户机程序应该测试错误条件
并适当地进行回应。由于某种原因,返回状态值的客户机库的调用做这些事情,而且您要承担忽略它们的后果。您最终还是要试图捕获由于没有错误检查而出现在程序中的错误,这些程序的用户会对程序运行如此不规律感到奇怪。考虑我们的程序,客户机程序1。如何知道它是否真正连接到服务器上?可以通过查看服务器的日志,找出与运行程序时间相应的Connect和Quit事件:

    这条消息表示根本没有创建连接。不幸的是,客户机程序1没有告诉我们出现的这些结果。实际上它不能。它不能实现任何错误检查,所以它甚至不知道自己发生了什么事。无论如何,当然不一定必须查看日志来寻找是否能连接到服务器!让我们立刻改正它。在MySQL 客户机库中返回值的例程基本上以下列两种方式之一表示成功或失败:
    ■ 成功时,值的指针函数返回一个非NULL 指针,失败时返回N U L L(在这里NULL 的意思是“C NULL 指针”,而不是“MySQL NULL 列值”)。迄今为止,我们使用的客户机库的例程mysql_init() 和mysql_real_connect() 都用返回连接处理程序的指针来表示成功, NULL 表示失败。
    ■ 整型数值的函数一般成功返回0,失败返回非0。不要测试特定的非0值,如- 1。因为当失败时,并不保证客户机库函数返回任何特定的值。有时,您可能会看到像如下的较旧的错误地测试返回值的代码:

    这个测试可能工作,也可能不工作。MySQL API 不将任何非0错误的返回指定为特定的值,而只判断它(显然地)是否为0。这个测试应该写成下面两段之一:

    或如下所示:

    这两个测试是等价的。如果审核MySQL 的源代码,则可以发现,它基本上用第一种形式测试,因为这编写起来更简短。
    不是每个API 调用都返回值。我们使用的另一个客户机例程mysql_close() 就不返回值(它如何失败?失败了又如何?无论如何,都要进行连接)。
    当客户机库调用失败,并且需要有关失败的详细信息时, API 中的两个调用都是有用的。mysql_error() 返回包括错误信息的字符串,而mysql_errno() 返回数值代码。应该在错误出现以后立刻调用它们,因为如果发布另一个返回状态的API 调用,则从mysql_error() 或mysql_errno() 获取的任何错误信息都将来自于后面的调用。

   


Copyright © 2002-2015 版权所有
学校地址:北京市海淀区西三旗建材城中路29号北大青鸟
招生热线:010-82011433/32 京公网安备110102004704  京ICP备05043413号 京公网安备110102004704