This Domain(Admin5.com) is for Sale:

My SQL数据库实用技术(36)

时间:2007-12-23  来源:不详  作者:迈克DB

6.8.4 获取表信息
MySQL 答应使用下面的查询获取有关表结构的信息(下面两者是等价的):

dedecms.com

织梦内容管理系统


与SELECT 相类似,两个语句都返回结果集。为了在表中找出有关列,所需做的就是处理结果集中的行,从中获取有用的信息。例如,假如从mysql 客户机上发布DESCRIBE images 语句,就会返回这样的信息:
本文来自织梦

copyright dedecms


  假如从自己的客户机上执行同样的查询,可以得到相同的信息(没有边框)。假如只想要单个列的信息,则使用如下这个查询:
  SHOW FIELDS FROM tbl _ name LIKE “col _ name”
  此查询会返回相同的列,但只是一行(假如列不存在就不返回行)。
  6.8.5 需要避免的客户机程序设计错误
  本节讨论一些常见的MySQL C API 程序设计错误,以及如何避免其发生(这些问题在MySQL 邮件清单中会周期性地忽然出现)。
  1. 错误1——使用未初始化的连接处理程序指针在本章的样例中,我们已经通过传递NULL 参数调用了m y s q l _ 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 连接处理程序的MySQL CAPI 函数,系统就会崩溃。这些代码段的修改就是确保conn 有一个可知的值。例如,可以将它初始化到已经分配的MYSQL 结构地址中去:

copyright dedecms

织梦好,好织梦


然而,推荐的(较轻易的!)解决方案仅仅是将NULL 显式地传递给mysql _ init( ),让该函数分配MYSQL 结构,并将返回值赋值给conn:

织梦内容管理系统

织梦内容管理系统


无论如何不要忘记检验mysql_init() 的返回值,以确保它不是NULL。

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息