当前位置:七道奇文章资讯数据防范MySQL防范
日期:2011-05-02 15:51:00  来源:本站整理

需求避免的MYSQL客户机程序计划错误[MySQL防范]

赞助商链接



  本文“需求避免的MYSQL客户机程序计划错误[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
 

本文谈论一些常见的MySQLC API 程序计划错误,以及若何避免其发生(这些问题在MySQL邮件清单中会周期性地忽然呈现).

1. 错误1——利用未初始化的衔接处理程序指

我们已经通过传送NULL 参数调用了mysql_ i n i t ( ),这就是让它分配并且初始化MYSQL 构造,然后返回一个指针.别的一种办法是将指针传送到一个已有的MYSQL 构造中.在这种情形下, mysql_init() 会将构造初始化并返回一个指针,而没必要自己分配构造.假如要利用第二种办法,则要当心会呈现一些奇妙的问题.下面的谈论指出了需求注意的一些问题.假如将一个指针传送给mysql_ init( ),它应当实际指向某些东西.看下面的代码段:



这个问题是,mysql_init() 得到了一个指针,但指针没有指向所知的任何地方.conn 是一个部分变量,因此在main() 开始履行时它是一个能指向任何地方的未初始化的存储器,这就是说mysql_init() 将利用指针,并可在内存的一些肆意区域滥写.假如幸运的话, conn 将指向您的程序地址空间的外部,这样,系统将当即终止,使您能尽早意识到代码中呈现的问题.

假如不幸的话, conn 将指向程序中今后才利用的一些数据的内部,直到再次利用那个数据时才发现问题.因此实际呈现问题的地方远比执路程序时呈现的问题多,也更难捕捉到.下面是一段有问题的代码:



此时, conn 是一个全局变量,因此在程序启动前,将它初始化为0(就是NULL).mysql_init() 碰到NULL 参数,因此初始化并分配一个新的衔接处理程序.只要将conn 传送给需求非NULL 衔接处理程序的MySQLCAPI 函数,系统就会崩溃.这些代码段的改正就是确保conn 有一个可知的值.比方,可以将它初始化到已经分配的MYSQL 构造地址中去:



但是,举荐的(较简单的!)办理筹划仅仅是将NULL 显式地传送给mysql_ init( ),让该函数分配MYSQL 构造,并将返回值赋值给conn:



无论若何不要忘掉查验mysql_init() 的返回值,以确保它不是NULL.

2. 错误2——有效后果集查验的失利

请记着查抄但愿得到的后果集的调用状况.下面的代码没有做到这一点:



不幸地是,假如mysql_store_result() 失利,res_set 为NULL,while 循环也不履行了,应测试返回后果集函数的返回值,以确保实际上在举行工作.

3. 错误3—— NULL 列值惹起的失利

不要忘掉查抄mysql_fetch_row() 返回的数组MYSQL_ROW 中列值能否为NULL 指针.假如row[i] 为NULL,则在一些机械上,下面的代码就会惹起崩溃:



该错误危害最大的部份是,有些printf() 的版本很宽大地对NULL指针输出了"( null )",这就使错误很简单逃脱而没有把错误定位.假如把程序给了朋友,而他只有不太宽大printf( )版本,程序就会崩溃,您的朋友会认为您是个无用的程序员.循环应当写成下面这样:



不需求查抄列值能否为NULL 的惟一一次是当已经从列信息构造肯定IS _ NOT _ NULL( )为真时.

4. 错误4——传送无意义的后果缓冲区

需求您供应缓冲区的客户机库函数普通要使这些缓冲区真正存在,下面的代码违反了这个法则:



问题是什么呢?to_str 必须指向一个存在的缓冲区,而在这个样例中没有,因此,它指向了随便的位置.不要向mysql_escape_string 传送无意义的指针作为to_str 参数,不然它会任意踩踏内存.

  以上是“需求避免的MYSQL客户机程序计划错误[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 挑选笔记本处理器(CPU)需求避免的误区及小常识
  • 需求避免的MYSQL客户机程序计划错误
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .