`

Zen-cart 数据库封装类解读

阅读更多

要操作数据库,一般步骤基本如此,首先建立到数据库管理系统的连接,然后选择数据,接着就是操作数据库。首先看看queryFactory类,看看1.3.9版本连接数据库系统的改进:

view source
print?01 $connectionRetry = 10; 

02 while (!isset($this->link) || ($this->link == FALSE && $connectionRetry !=0) ) 

03 { 

04   $this->link = @mysql_connect($zf_host, $zf_user, $zf_password, true); 

05   $connectionRetry--; 

06 } 

07 if ($this->link) { 

08   if (@mysql_select_db($zf_database, $this->link)) { 

09     if (defined('DB_CHARSET') && version_compare(@mysql_get_server_info(), '4.1.0', '>=')) { 

10       @mysql_query("SET NAMES '" . DB_CHARSET . "'", $this->link); 

11       if (function_exists('mysql_set_charset')) { 

12         @mysql_set_charset(DB_CHARSET, $this->link); 

13       } else { 

14         @mysql_query("SET CHARACTER SET '" . DB_CHARSET . "'", $this->link); 

15       } 

16     } 

17     $this->db_connected = true; 

18     return true; 

19   } else { 

20     $this->set_error(mysql_errno(),mysql_error(), $zp_real); 

21     return false; 

22   } 

23 } else { 

24   $this->set_error(mysql_errno(),mysql_error(), $zp_real); 

25   return false; 

26 }

这段代码比1.3.8的连接逻辑更加的缜密了,首先尝试10次连接数据系统,1.3.8中只要连接一次连接不上就回显错误,不管怎样,尝试多次连接,应该是合理的。另外新版本中引进了DB_CHARSET常量,让我们可以自己指定数据的字符编码,在1.3.8中,默认并没有这个考虑,这也就是一些乱码产生的本质原因,但是Zen-cart中文版中为了对付这个问题,加入了mysql_query(‘SET NAMES “utf8″‘, $this->link)这个语句,相比之下,原作者的水平还是技高一筹啊……

接下来再看看这个方法:

view source
print?1 function prepare_input($zp_string) { 

2   if (function_exists('mysql_real_escape_string')) { 

3     return mysql_real_escape_string($zp_string, $this->link); 

4   } elseif (function_exists('mysql_escape_string')) { 

5     return mysql_escape_string($zp_string, $this->link); 

6   } else { 

7     return addslashes($zp_string); 

8   } 

9 }

这个函数用于对数据进行转义,保证数据安全。这可正所谓是榨干了油的顾虑啊,同时也知道应该先用mysql_real_escape_string()再用mysql_escape_string()实在不行再用addslashes()。

可以说,这个类中的Execute函数是最核心的,先看这个函数开始的这段代码:

view source
print?01 // bof: collect database queries 

02 if (defined('STORE_DB_TRANSACTIONS') && STORE_DB_TRANSACTIONS=='true') { 

03   global $PHP_SELF, $box_id, $current_page_base; 

04   if (strtoupper(substr($zf_sql,0,6))=='SELECT' /*&& strstr($zf_sql,'products_id')*/) { 

05     $f=@fopen(DIR_FS_SQL_CACHE.'/query_selects_' . $current_page_base . '_' . time() . '.txt','a'); 

06     if ($f) { 

07       fwrite($f,  "\n\n" . 'I AM HERE ' . $current_page_base . /*zen_get_all_get_params() .*/ "\n" . 'sidebox: ' . $box_id . "\n\n" . "Explain \n" . $zf_sql.";\n\n"); 

08       fclose($f); 

09     } 

10     unset($f); 

11   } 

12 } 

13 // eof: collect products_id queries

刚开始真让人摸不着北,其实这段代码就是记录数据库查询,对应后台 日志选项->保存数据库查询,系统默认是false,也没有必要打开,否则每次查询将被保存一条日志信息,应该来说,这些信息没有太多用处。

接下来这个函数首先根据传递进来的参数$zf_cache判断这个查询是否需要缓存,如果如果需要缓存和查询已经被缓存并且缓存还没有过期,就把缓存内容吸收回来填充,否则如果没有缓存文件或者缓存文件过期,但是指定查询需要缓存,那么先删除已经缓存的文件(如果有),然后获取查询数据,接着缓存这个结果集,再否则的话就直接返回查询数据。从这个源码可以看到,Execut函数最后是用来查询,由于其里面也是使用mysql_query执行SQL语句,如果是INSERT这样的操作,同样也是可以被执行的,只是在$obj->RecordCount() > 0这个条件时,返回了false,所以并没有什么影响,事实上,这个类中也实现了另一个方法叫perform(),专门用来对付insert和update,这个函数只是execute函数的封装,只是它添加了调试跟踪的机制,看起来,它似乎更好,但是对我习惯了SQL语句,并且对SQL语句有十足把握能力的来说,我更喜欢直接控制SQL语句,我并不想变得更加傻瓜…..

现在来看看queryFactoryResult类,这个是一个查询结果集,主要两个函数,RecordCount返回记录数,MoveNext移动到下一条记录,这个类的对象数据在查询时被填充。从这个层次来说,Zen-cart里面的类,只是为了更加方便的集中函数,类之间的关系比较松弛,没有真正按照面向对象的思维来组织类,总之,Zen-cart本身就是一个面向过程设计思维设计出来的系统,虽然中间用了很多类,不过它只不过是为了更加方便的集中函数,如此而已。




本文转自:http://ifeeline.com/archives/207

意外看到的感觉不错就借鉴一下。

分享到:
评论

相关推荐

    Zen-Cart1.5.1大分类下直接显示产品列表插件

    安装和配置这个插件可能涉及到修改Zen-Cart的模板文件、数据库查询以及后台设置。商家需要有一定的Zen-Cart操作基础,或者寻求专业开发人员的帮助,以确保正确安装并有效利用这个插件。 总结来说,"Zen-Cart1.5.1大...

    zen-cart入门参考资料

    2. **安装与配置**:Zen-Cart的安装过程包括下载源码、上传至服务器、创建数据库、运行安装向导等步骤。在配置时,你需要设置商店的基本信息,如货币、语言、税收规则、配送方式等。 3. **主题与模板**:Zen-Cart...

    史上最详细ZEN-CART模板修改文档

    Zen-Cart是一款开源的电子商务购物车系统,专为在线商家设计,提供强大的商品管理、订单处理和店面定制功能。这份“史上最详细ZEN-CART模板修改文档”将深入讲解如何自定义和优化Zen-Cart的界面,以满足不同商家的...

    zen-cart-v151

    Zen-Cart的命名规则通常会包含版本号和发布日期,例如"zen-cart-v151-20131020"可能表示该版本是在2013年10月20日发布的。 **Zen-Cart核心特性** 1. **多语言支持**: 虽然这里提供的版本是英文原版,但Zen-Cart...

    zen-cart 购物网站

    Zen-Cart使用MySQL作为数据库,存储商品信息、用户数据和订单记录。PHP作为服务器端脚本语言,处理HTTP请求,与数据库交互,并生成动态网页内容。这种架构使得Zen-Cart具备了高度的可扩展性和定制性,开发者可以根据...

    Zen-cart购物车系统

    2009年6月26日发布的版本为Zen-Cart v1.3.8a,它在当时代表了该系统的最新进展。这个版本包含了多项改进和修复,以提升性能、安全性和用户体验。 Zen-Cart的特点在于其易用性和灵活性,使得即使是没有编程背景的...

    zen-cart-v151-utf8-20131020

    "zen-cart-v151-utf8-20131020"这个版本表明这是一个针对UTF-8编码的Zen Cart 1.5.1版本,发布于2013年10月20日。 Zen Cart的主要特点包括: 1. **多语言支持**:Zen Cart支持多种语言,允许商家面向全球市场提供...

    zen-cart模版

    Zen-Cart模板是用于构建电子商务网站的开源解决方案。Zen-Cart是一个基于PHP的购物车系统,它提供了丰富的功能,让商家能够轻松地在线销售产品。模板是Zen-Cart的核心组成部分,它决定了网站的外观和布局,使商家...

    zen-cart-v138a-utf8-20090820

    - `includes` 文件夹:存放Zen-Cart的主要代码和配置文件,如数据库连接、语言文件、函数库等。 - `languages` 文件夹:包含了不同语言的翻译文件,用于多语言支持。 - `templates` 文件夹:存储各种主题模板,包括...

    zen-cart无错版

    Zen-Cart是一个开源的电子商务购物车系统,专为在线商家设计,提供了一个用户友好的界面和强大的后台管理功能。"zen-cart无错版"通常指的是该软件的一个优化版本,经过了社区成员或开发者的修正,消除了已知的错误和...

    史上最详细ZEN-CART模板修改文档.pdf

    ### ZEN-CART模板修改详尽指南 #### 一、ZEN-CART模板结构概览 **史上最详细ZEN-CART模板修改文档**为开发者提供了一份全面深入的指南,涵盖了ZEN-CART模板的各个方面,包括但不限于目录结构、模板规则、模板修改...

    zen-cart-chinese-with-plugin-1.5.4

    zen-cart-chinese-with-plugin-1.5.4 zen-cart-chinese-with-plugin-1.5.4 zen-cart-chinese-with-plugin-1.5.4

    zen-cart 中文美化

    Zen-Cart是一款开源的在线商店管理系统,它基于PHP语言,采用MySQL数据库,提供了丰富的功能和高度的可定制性。在中文美化过程中,主要涉及以下几个方面的知识: 1. **语言翻译**:Zen-Cart 默认使用英文界面,中文...

    ZEN-CART1.3.X商业模板

    Zen-Cart 1.3.x 是一款开源的电子商务解决方案,专为在线商家设计,提供强大的购物车功能。这款系统以其灵活性、可定制性和丰富的功能集而受到广大用户的欢迎。"ZEN-CART1.3.X商业模板"是针对Zen-Cart 1.3.x 版本的...

    zen-cart-v1.3.8a-full-fileset-12112007

    这个“Zen-Cart v1.3.8a Full Fileset 12112007”的压缩包很可能包含了所有必要的源代码文件、数据库脚本、配置文件以及可能的示例数据,用于快速部署和设置Zen-Cart系统。安装过程中,通常需要将文件上传至服务器,...

    zen-cart模板

    Zen-Cart模板是一种用于构建在线商店的开源电子商务解决方案。它基于PHP编程语言,与MySQL数据库协同工作,提供了一个用户友好的界面和强大的管理功能。Zen-Cart模板设计旨在提升店铺的视觉吸引力,同时确保购物体验...

    zen-cart模版。login_box

    Zen-Cart是一个开源的电子商务平台,它为在线商家提供了一个功能强大的购物车系统。"Login_Box"是Zen-Cart中的一个重要模块,专为提升用户体验而设计,尤其关注顾客登录过程的便捷性。这个模块使客户能够在任何页面...

Global site tag (gtag.js) - Google Analytics