mysql入门系列:需要避免的mysql客户机程序设计错误--

mysql入门系列:需要避免的mysql客户机程序设计错误--

ID:9492435

大小:63.00 KB

页数:9页

时间:2018-05-01

mysql入门系列:需要避免的mysql客户机程序设计错误--_第1页
mysql入门系列:需要避免的mysql客户机程序设计错误--_第2页
mysql入门系列:需要避免的mysql客户机程序设计错误--_第3页
mysql入门系列:需要避免的mysql客户机程序设计错误--_第4页
mysql入门系列:需要避免的mysql客户机程序设计错误--_第5页
资源描述:

《mysql入门系列:需要避免的mysql客户机程序设计错误--》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Mysql入门系列:需要避免的MYSQL客户机程序设计错误>>  6.8其他主题  本节包括几个主题,这些主题不完全适合于本章从client1到client5的开发中的任一小节的内容:  ■在使用结果集元数据帮助验证这些数据适合于计算之后,使用结果集数据计算结果。  ■如何处理很难插入到查询中的数据。  ■如何处理图形数据。  ■如何获得表结构的信息。  ■常见的MySQL程序设计错误及如何避免。  6.8.1在结果集上执行计算  迄今为止,我们集中而主要地使用了结果集元数据来打印行数据,但很明显,除打印之外,还有需要使用数据做其他事情的时候。例如,计算基于数据值的统计信息,应用元数据确

2、保数据适合它们要满足的需求。哪种类型的需求?对于启动程序来说,可能要校验一下正  要执行数字计算的列实际上是否包含着数字!  下面的列表显示了一个简单函数summary_stats(),它获取结果集和列索引,并产生列值的汇总统计。该函数还列出缺少数值的数量,它是通过检查NULL来检测的。这些计算包括两个数据所必须满足的需求,summary_stats()用结果集元数据来校验:  ■指定的列必须存在(也就是说,列索引必须在结果集列值的范围内)。  ■此列必须包括数字值。  如果这些条件不满足,则summary_stats()只打印出错误消息并返回。代码如下:        请注意在mysq

3、l_fetch_roysql_data_seek()。为获得同样的结果集,它允许多次调用summary_stats()(假设要计算几列的统计值的话)。每次调用summary_stats()都要重新回到到结果集的开始(这里假设mysql_store_result()创建结果集,如果用mysql_use_result()创建结果集就只能按顺序处理行,而且只能处理一次)。summary_stats()是个相对简单的函数,但它给我们一个提示,就是如何编写一个比较复杂的计算程序,如两个列的最小二乘回归或者标准统计,如t-检验。  6.8.2对查询中有疑问的数据进行编码  包括引号、空值和反斜线的数

4、据值,如果把它们插入到查询中,在执行查询时就会产生一些问题。下面的讨论论述了这些难点,并介绍了解决的办法。假设要建造一个SELECT查询,它基于由name指向的空终结串的内容:    如果name的值类似于0Malley,Brian,这时进行的查询就是非法的,因为引号在引用的字符串里出现:    需要特别注意这个引号,以便使服务器不将它解释为name的结尾。一种方法是在字符串内使用双引号,这就是ANSISQL约定。SQL支持这个约定,也允许引号在反斜线后使用:    另一个有问题之处是查询中任意二进制数据的使用,例如,在把图形存储到数据库这样的应用程序中会发生这种情况。因为二进制数值含有

5、一些字符,把它放到查询中是不安全的。为了解决这个问题,可使用mysql_escape_string(),它可以对特殊字符进行编码,使其在引用的字符串中可以使用。mysql_escape_string()认为的特殊字符是指空字符、单引号、双引号、反斜线、换行符、回车符和Control-Z(最后一个在dash;可能因为预先执行了确认检查就不必编码了。例如,如果处理号码的字符串,它完全由数字和短线组成,那么就不必调用mysql_escape_string()了,否则还是要调用。  mysql_escape_string()对有问题的字符进行编码是将它们转换为以反斜线开头的2个字符的序列。例如,

6、空字符转换为0,这里的0是可打印的ASCII码0,而不是空。反斜线、单引号和双引号分别转换为、和。调用mysql_escape_string()的过程如下:    mysql_escape_string()对from_str进行编码,并把结果写入to_str中,还添加了空终结值,这样很方便,因为可以利用像strcpy()和strlen()这样的函数使用该结果串。from_str指向包括将要编码的字符串的char缓冲区,这个字符串可能包含任何内容,其中包括二进制数据。to_str指向一个存在的char缓冲区,在这个缓冲区里,可以写入编码的字符串;不要传递未初始化的指123下一页>>>>这篇

7、文章来自..,。针或NULL指针,希望由mysql_escape_string()分配空间。由to_str指向的缓冲区的长度至少是(from_len*2)+1个字节(很可能from_str中的每个字符都需要用2个字符来编码;额外的字节是空终结值)。  from_len和to_len都是unsignedint值,from_len表示from_str中数据的长度;提供这个长度是非常必要的,因为from_str可能包含空值字节,不能把它当

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。