会员名称:  密码:   验证码:     会员注册  忘记密码? 
设为首页
加入收藏
返回首页
媒体资讯>> 业界资讯 - 会展动态 - 竞赛&活动 - IT互联网  媒体学院>> 图形图像 - 网页制作 - 网络编程 - 数据库 - 服务器 - 网络应用  作品赏析>> 视频音响 - CG动画 - UI设计 - 平面设计 - 网页设计 - 摄影映象 - 三维2D - 其它设计  媒体工作室>> 视频影像 - 音频声响 - 三维2D - 平面视觉 - 软硬技术 - 摄影映象  人物访谈>> 人物访谈 - 华夏新锐  媒体杂志>> 媒体杂志  素材图库>> 丽景佳图 - 设计素材 - 资料图库 - 矢量图库 - 动态动画 - 特色图标  酷站赏析>> 韩国网站 - 国外网站 - 国内网站  会员中心>> 会员注册 - 会员登陆
当前位置:华夏媒体 - > 媒体学院 - > 数据库 - > MYSQL - > MySQL数据库技术(34)
   
   
   
MySQL数据库技术(34) MySQL数据库技...  [MYSQ...]
More... 
   
网络协议X档案全集(十) 网络协议X档案...  [其它...]
不可忽视的BIOS参数设置 不可忽视的BIO...  [其它...]
微软IE浏览器非常规修改全攻略(上) 微软IE浏览器非...  [其它...]
微软IE浏览器非常规修改全攻略(下) 微软IE浏览器非...  [其它...]
网管十招 网管十招  [其它...]
微软安全问题 源自OS和IE中集成RSS 微软安全问题 ...  [其它...]
修改注册表使电脑更安全 修改注册表使电...  [其它...]
利用注册表管理IP地址 利用注册表管理...  [其它...]
有关IIS HACK的一些方法整理 有关IIS HACK的...  [其它...]
More 
MySQL数据库技术(34)
编辑:华夏媒体     作者:未知     来源:网络     时间:2006-07-29     总浏览量:1279
文字大小:[      ]     文字颜色:      双击滚屏/单击停止

[上一页] [1] [2] [3] [4] [5] [6] [下一页] 

6.6 处理查询
    我们已经知道了如何开始和结束与服务器的会话,现在应该看看如何控制会话。本节介绍了如何与服务器通信以处理查询。执行的每个查询应包括以下几步:
    1) 构造查询。查询的构造取决于查询的内容—特别要看是否含有二进制数据。
    2) 通过将查询发送到服务器执行来发布查询。
    3) 处理查询结果。这取决于发布查询的类型。例如, SELECT 语句返回数据行等待处理,INSERT 语句就不这样。构造查询的一个要素就是使用哪个函数将查询发送到服务器。较通用的发布查询例程是mysql _ real _ query ( )。该例程给查询提供了一个计数串(字符串加上长度)。必须了解查询串的长度,并将它们连同串本身一起传递给mysql_real_query() 。因为查询是一个计数的字符串,
所以它的内容可能是任何东西,其中包括二进制数据或者空字节。查询不能是空终结串。另一个发布查询的函数, mysql _ query ( ),在查询字符串允许的内容上有更多的限制,但更容易使用一些。传递到mysql_query() 的查询应该是空终结串,这说明查询内部不能含有空字节(查询里含有空字节会导致错误地中断,这比实际的查询内容要短)。一般说来,如果查询包含任意的二进制数据,就可能包含空字节,因此不要使用mysql _ query( )。另一方面,当处理空终结串时,使用熟悉的标准C 库字符串函数构造查询是很耗费资源的,例如strcpy ( )和sprintf( )。
    构造查询的另一个要素就是是否要执行溢出字符的操作。如果在构造查询时使用含有二
进制数据或者其他复杂字符的值时,如引号、反斜线等,就需要使用这个操作。这些将在
    6.8.2节“对查询中有疑问的数据进行编码”中讨论。
    下面是处理查询的简单轮廓:


    mysql_query() 和mysql_real_query() 的查询成功都会返回零值,查询失败返回非零值。查询成功指服务器认为该查询有效并接受,而且能够执行,并不是指有关该查询结果。例如,它不是指SELECT 查询所选择的行,或DELETE 语句所删除的行。检查查询的实际结果要包括其他的处理。
    查询失败可能有多种原因,有一些常见的原因如下:
    ■ 含有语法错误。
    ■ 语义上是非法的—例如涉及对表中不存在的列的查询。
    ■ 没有足够的权利访问查询所引用的数据。
    查询可以分成两大类:不返回结果的查询和返回结果的查询。INSERT、DELETE和UPDATE等语句属于“不返回结果”类的查询,即使对修改数据库的查询,它们也不返回任何行。可返回的唯一信息就是有关受作用的行数。SELECT 语句和SHOW 语句属于“返回结果”类的查询;发布这些语句的目的就是要返回某些信息。返回数据的查询所生成的行集合称为结果集,在MySQL 中表示为MYSQL_RES 数据类型,这是一个包含行的数据值及有关这些值的元数据(如列名和数据值的长度)的结构。空的结果集(就是包含零行的结果)要与“没有结果”区分开。
    6.6.1 处理不返回结果集的查询
    处理不返回结果集的查询,用mysql_query() 或mysql_real_query() 发布查询。如果查询成功,可以通过调用mysql _ a ffected_rows() 找出有多少行需要插入、删除或修改。下面的样例说明如何处理不返回结果集的查询:


    请注意在打印时mysql _ a ffected_rows() 的结果是如何转换为unsigned long 类型的,这个函数返回一个my_ulonglong 类型的值,但在一些系统上无法直接打印这个类型的值(例如,笔者观察到它可在FreeBSD 下工作,但不能在Solaris 下工作)。把值转换为unsigned long 类型并使用‘% l u’打印格式可以解决这个问题。同样也要考虑返回my_ulonglong 值的其他函数,如mysql_num_rows() 和mysql _ insert _ id ( )。如果想使客户机程序能跨系统地移植,就要谨记这一点。
    mysql _ rows _ affected() 返回查询所作用的行数,但是“受作用的行”的含义取决于查询的类型。对于INSERT、DELETE 和UPDATE,是指插入、删除或者更新的行数,也就是MySQL 实际修改的行数。如果行的内容与所要更新的内容相同,则MySQL 就不再更新行。这就是说虽然可能选择行来更新(通过UPDATE 语句的WHERE 子句),但实际上该行可能并未改变。
    对于UPDATE,“受作用的行”的意义实际上是个争论点,因为人们想把它当成“被匹配的行”—即选择要更新的行数,即使更新操作实际上并未改变其中的值也是如此。如果应用程序需要这个信息, 则当与服务器连接时可以用它来请求以实现这个功能。将CLIENT_FOUND_ROWS 的flags 值传递给mysql _ real _ connect( )。也可以将CLIENT _ FOUND _ROWS 作为flags 参数传递给do _ connect ( );它将把值传递给mysql _ real _ connect( )。


[上一页] [1] [2] [3] [4] [5] [6] [下一页] 

打印   收藏   关闭   至顶部  


关于我们 | 联系我们 | 合作伙伴 | 站点地图 | 免责声明 | 版权声明 | 意见建议
版权所有  Copyright © 2005-2006 华夏媒体(Media86.Com). All Rights Reserved .
网站备案号:粤ICP备06055307号