Home >Database >Mysql Tutorial >需要避免的MYSQL客户机程序设计错误[组图]_MySQL

需要避免的MYSQL客户机程序设计错误[组图]_MySQL

WBOY
WBOYOriginal
2016-06-01 13:52:40898browse

  本文讨论一些常见的MySQLC API 程序设计错误,以及如何避免其发生(这些问题在MySQL邮件清单中会周期性地突然出现)。

  1. 错误1――使用未初始化的连接处理程序指针

  我们已经通过传递NULL 参数调用了mysql_ i n i t ( ),这就是让它分配并且初始化MYSQL 结构,然后返回一个指针。另外一种方法是将指针传递到一个已有的MYSQL 结构中。在这种情况下, mysql_init() 会将结构初始化并返回一个指针,而不必自己分配结构。如果要使用第二种方法,则要小心会出现一些微妙的问题。下面的讨论指出了需要注意的一些问题。如果将一个指针传递给mysql_ init( ),它应该实际指向某些东西。看下面的代码段:

需要避免的MYSQL客户机程序设计错误[组图]_MySQL

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

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

需要避免的MYSQL客户机程序设计错误[组图]_MySQL

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

需要避免的MYSQL客户机程序设计错误[组图]_MySQL

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn