ECShop v2.7.2没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现。这样做的好处是实现非常轻量,只有一个文件,27Kb,大大减小了分发包的文件大小。另外,当网站需要做memcached缓存时,也可以很方便的实现。当然,这样做的后果就是数据库的选择非常狭窄,无法实现其它的非MySQL数据库。

ECShop的数据操作类文件是includes/cls_mysql.php,类名是cls_mysql。该类主要提供了下面 一些比较有用的方法:

  • getAll($sql)和getAllCached($sql, $cached = 'FILEFIRST'):获取所有记录。
  • getRow($sql, $limited = false)和getRowCached($sql, $cached = 'FILEFIRST'):获取单行记录。
  • getCol($sqlse)和getColCached($sql, $cached = 'FILEFIRST'):获取某栏位的所有值。
  • getOne($sql, $limited = false)和getOneCached($sql, $cached = 'FILEFIRST'):获取单个数值。
  • query($sql):执行数据库查询。
  • autoExecute($table, $field_values, $mode = 'INSERT', $where = ''):数据库表操作。

现在我们以实例的方式来说明这些方法如何使用。首先,在ecshop/admin目录下新增文件test_mysql.php,文件内容如下:

  1. <?php
  2. define('IN_ECS', true);
  3. define('EC_CHARSET', 'utf-8');
  4. define('ROOT_PATH', 'D:/Program Files/Zend/Apache2/htdocs/ecshop/');
  5. define('DATA_DIR', 'data');
  6. $db_host = "localhost:3306";
  7. $db_name = "ecshop";
  8. $db_user = "root";
  9. $db_pass = "";
  10. require('../includes/cls_mysql.php');
  11. $db = new cls_mysql($db_host, $db_user, $db_pass, $db_name);

获取所有记录

getAll方法用来从数据库中获取满足条件的所有记录。getAllCached是它的缓存版本,cache key是该方法的第二个参数,如果缓存有效,直接返回缓存结果,否则重新执行数据库查询。

将下面的代码加到test_mysql.php的最后:

  1. test_getAll();
  2. function test_getAll()
  3. {
  4. global $db;
  5. $sql = "SELECT user_id, user_name, email FROM ecs_admin_user";
  6. $result = $db->getAll($sql);
  7. print_r($result);
  8. }

修改以后的test_mysql.php执行结果如下:

  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [user_id] => 1
  6. [user_name] => admin
  7. [email] => admin@admin.com
  8. )
  9. [1] => Array
  10. (
  11. [user_id] => 2
  12. [user_name] => bjgonghuo1
  13. [email] => bj@163.com
  14. )
  15. [2] => Array
  16. (
  17. [user_id] => 3
  18. [user_name] => shhaigonghuo1
  19. [email] => shanghai@163.com
  20. )
  21. [3] => Array
  22. (
  23. [user_id] => 4
  24. [user_name] => amonest
  25. [email] => amonest@foxmail.com
  26. )
  27. )

获取单行记录

getRow方法用来从数据库中获取满足条件的单行记录,或者说是第一条记录。getRowCached是它的缓存版本,cache key是该方法的第二个参数,如果缓存有效,直接返回缓存结果,否则重新执行数据库查询。

将下面的代码加到test_mysql.php的最后:

  1. test_getRow();
  2. function test_getRow()
  3. {
  4. global $db;
  5. $sql = "SELECT user_id, user_name, email FROM ecs_admin_user LIMIT 1";
  6. $result = $db->getRow($sql);
  7. print_r($result);
  8. }

修改以后的test_mysql.php执行结果如下:

  1. Array
  2. (
  3. [user_id] => 1
  4. [user_name] => admin
  5. [email] => admin@admin.com
  6. )

获取某栏位的所有值

getCol方法用来从数据库中获取满足条件的某个栏位的所有值。getColCached是它的缓存版本,cache key是该方法的第二个参数,如果缓存有效,直接返回缓存结果,否则重新执行数据库查询。

将下面的代码加到test_mysql.php的最后:

  1. test_getCol();
  2. function test_getCol()
  3. {
  4. global $db;
  5. $sql = "SELECT email FROM ecs_admin_user";
  6. $result = $db->getCol($sql);
  7. print_r($result);
  8. }

修改以后的test_mysql.php执行结果如下:

  1. Array
  2. (
  3. [0] => admin@admin.com
  4. [1] => bj@163.com
  5. [2] => shanghai@163.com
  6. [3] => amonest@foxmail.com
  7. )

获取单个值

getOne方法用来从数据库中获取满足条件的单个值。getOneCached是它的缓存版本,cache key是该方法的第二个参数,如果缓存有效,直接返回缓存结果,否则重新执行数据库查询。

将下面的代码加到test_mysql.php的最后:

  1. test_getOne();
  2. function test_getOne()
  3. {
  4. global $db;
  5. $sql = "SELECT email FROM ecs_admin_user WHERE user_id = 4";
  6. $result = $db->getOne($sql);
  7. print_r($result);
  8. }

修改以后的test_mysql.php执行结果如下:


执行数据库查询

query方法用来执行数据库查询,例如INSERT,UPDATE,DELETE等。

将下面的代码加到test_mysql.php的最后:

[php] view plaincopy

 
  1. test_query();
  2. function test_query()
  3. {
  4. global $db;
  5. $sql = "UPDATE ecs_admin_user SET todolist = '你有一封新邮件!' WHERE user_id = 4";
  6. $db->query($sql);
  7. $sql = "SELECT todolist FROM ecs_admin_user WHERE user_id = 4";
  8. $result = $db->getOne($sql);
  9. print_r($result);
  10. }

修改以后的test_mysql.php执行结果如下:


数据库表操作

autoExecute方法用来简化对数据表的INSERT和UPDATE。

将下面的代码加到test_mysql.php的最后:

[php] view plaincopy

 
  1. test_autoExecute();
  2. function test_autoExecute()
  3. {
  4. global $db;
  5. $table = "ecs_role";
  6. $field_values = array("role_name" => "总经理办", "role_describe" => "总经理办", "action_list" => "all");
  7. $db->autoExecute($table, $field_values, "INSERT");
  8. // 执行的SQL:INSERT INTO ecs_role (role_name, action_list, role_describe) VALUES ('总经理办', 'all', '总经理办')
  9. $role_id = $db->insert_id(); // 新记录的ID:5
  10. $field_values = array("action_list" => "goods_manage");
  11. $db->autoExecute($table, $field_values, "UPDATE", "role_id = $role_id");
  12. // 执行的SQL:UPDATE ecs_role SET action_list = 'goods_manage' WHERE role_id = 5
  13. $sql = "SELECT action_list FROM ecs_role WHERE role_id = $role_id";
  14. $result = $db->getOne($sql);
  15. print_r($result);
  16. }

修改以后的test_mysql.php执行结果如下:

  1. goods_manage

ecshop操作数据库类的更多相关文章

  1. 非常不错的ASP操作数据库类,支持多数据库MSSQL,ACCESS,ORACLE,MYSQL等

    可同时操作多个不同类型的数据库. 完全不用考虑数据类型的差别,再也不用想字符型字段加不加单引号. 调用非常简单,对数据库的主要操作一般只需要一行代码. 支持mssql事务回滚. 可自动生成和输出sql ...

  2. PHP操作数据库类

    <?php /** * 功能: 数据库操作类 . * 作者: 赵铭哲 * 日期: 2016-05-23 * 时间: 9:43 */ namespace ZH\DataBase; use \Exc ...

  3. Python操作数据库类 Oracle、Sqlserver、PostgreSQL

    我在工作中经常使用Python,特点很明显,轻量,效率还不错,尤其在维护或者自动化方面. 下面是我使用到的访问数据库(Oracle.Sqlserver.PostgreSQL)的公共类. 一.Oracl ...

  4. C++ 操作数据库类

    #pragma once #include <string> #include <windows.h> #include <algorithm> #include ...

  5. mybatis 操作数据库(05)

    类型转换.动态排序,查询接口与mapper对应关系说明及其注意事项 一.MyBatis 自带写常见类型转换器.例如:java 类中 String 对应 mySQL中的varchar 二.自定义类型转换 ...

  6. 用于JDBC操作数据库的公共类

    /* * @(#)CommonSql.java 2011-9-5 * * Copyright 2011 Bianjing,All rights reserved. */ import java.sql ...

  7. JDBC操作数据库 封装好的工具类

    mysql sqlserver oracle 数据库的驱动jar包http://download.csdn.net/download/csdn576038874/8833683package cn.h ...

  8. SQLserver数据库操作帮助类SqlHelper

    1 SqlHelper源码 using System; using System.Data; using System.Xml; using System.Data.SqlClient; using ...

  9. .NET使用DAO.NET实体类模型操作数据库

    一.新建项目 打开vs2017,新建一个项目,命名为orm1 二.新建数据库 打开 SqlServer数据库,新建数据库 orm1,并新建表 student . 三.新建 ADO.NET 实体数据模型 ...

随机推荐

  1. mybatis源码分析(5)-----拦截器的实现原理(动态代理+责任链)

    写在前面 MyBatsi 的拦截器模式是基于代理的代理模式.并且myBatis 的插件开发也是以拦截器的形式集成到myBatis 当中. MyBatis 的拦截器已经插件是在org.apache.ib ...

  2. mmm-master漂移问题的分析

    date:20140527auth:Jin 一.问题描述线上store应用,偶尔出现慢的现象.检查发现是writer角色在master-backup之前漂移检查mysql-log没有发现异常,也没前端 ...

  3. extjs用iframe的问题

    项目中用extjs做前提系统的界面是左边用树做目录 右边用tabpanel做内容展示点击树节点的时候 在tabpanel添加新的tab JScript code var newTab = center ...

  4. ubuntu14.04 内核升级到 linux kernel 4.9

    http://blog.csdn.net/liuruiqun/article/details/55097292

  5. 接口安全--http数字签名

    原文:https://blog.csdn.net/u011521890/article/details/55506716 import java.io.UnsupportedEncodingExcep ...

  6. STM32+IAP方案 实现网络升级应用固件

    关注了这个概念有些日子了,这段时间总算有机会实战==网络升级应用固件,这里记录下遇到的问题,及解决方案. 原理与网上流传的串口作为传输手段 一致:不同之处,无非我这里使用了网络设备传输.==(lwip ...

  7. 深入理解java虚拟机笔记之一

    Java的技术体系主要有支撑java程序运行的虚拟机,提供各开发领域接口支持Java API,java编程语言及许多第三方java框架( 如Spring,Structs等)构成. 可以把Java程序设 ...

  8. 设置pycharm为Eclipse快捷键

    Ctrl + O 根据name模糊查找当前文件中类.方法Alt + (向左箭头或者向右箭头) ,回退or前进到到之前查看或者编辑处Alt + (向上箭头或者向下箭头) ,将当前方法整体往下或者往上移动 ...

  9. 基于java语言的给cube添加custom view来实现权限控制

    今天是农历2014年的最后一个工作日了,在这里提前祝大家新年快乐.羊年大吉!当然本人今天也拿出来点儿真东西,做为献给大家的新年礼物,依次共勉. 下文主要讲述的是使用Java代码来完成对cube基于部门 ...

  10. [Grunt] Cleaning your build folder with grunt-contrib-clean

    Grunt will clean up your build with the grunt-contrib-clean to make sure that no artifacts from prev ...