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 = ''):数据库表操作。
  • insert_id():获取刚刚插入数据库的新行的id。

现在我们以实例的方式来说明这些方法如何使用。首先,在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执行结果如下:

  1. amonest@foxmail.com

执行数据库查询

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

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

  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执行结果如下:

  1. 你有一封新邮件!

数据库表操作

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

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

  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. ecshop数据库操作类

    ECShop v2.7.2没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现. 好处:实现非常轻量,只有一个文件,27Kb,大大减小了分发包的文件大小. 当网站需要做me ...

  2. ecshop数据库操作函数

    ecshop数据库操作函数 分类: ecshop和dede2013-09-23 14:02 1716人阅读 评论(0) 收藏 举报 本章我们将结合eschop二次开发一些常见的开发例子.来谈谈ecsh ...

  3. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

  4. Android打造属于自己的数据库操作类。

    1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...

  5. PHP 数据库操作类:ezSQL

    EZSQL类介绍: 下载地址:http://www.jb51.net/codes/26393.htmlezsql是一个小型的快速的数据库操作类,可以让你很容易地用PHP操作各种数据库( MySQL.o ...

  6. 通用数据库操作类,前端easyui-datagrid,form

    实现功能:     左端datagrid显示简略信息,右侧显示选中行详细信息,数据库增删改 (1)点击选中行,右侧显示详细信息,其中[新增].[修改].[删除]按钮可用,[保存]按钮禁用 (2)点击[ ...

  7. php : mysql数据库操作类演示

    设计目标: 1,该类一实例化,就可以自动连接上mysql数据库: 2,该类可以单独去设定要使用的连接编码(set names XXX) 3,该类可以单独去设定要使用的数据库(use XXX): 4,可 ...

  8. php MySQL数据库操作类源代码

    php MySQL数据库操作类源代码: <?php class MySQL{ private $host; //服务器地址 private $name; //登录账号 private $pwd; ...

  9. 一个基于PDO的数据库操作类(新) 一个PDO事务实例

    <?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ...

随机推荐

  1. Linux学习 -- 常用命令

    目录处理命令 ls mkdir rmdir pwd cd cp mv rm 文件处理命令 touch cat tac more less head tail 连接命令 ln 软连接 ln -s 类似于 ...

  2. js格式转换

    //1.保留整数 function showInteger(value,row,index){ if(value!=null && value!="" && ...

  3. 设计模式--命令模式(Command)

    基本概念:  Command模式也叫命令模式 ,是行为设计模式的一种.Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数,命令模式将方法调用给封装起来了. 命令模式的 ...

  4. Spring 后置处理器 PropertyPlaceholderConfigurer 类(引用外部文件)

    一.PropertyPlaceholderConfigurer类的作用 PropertyPlaceholderConfigurer 是 BeanFactory 后置处理器的实现,也是 BeanFact ...

  5. IIS7或IIS7.5 ISAPI和CGI限制找不到的问题记录

    弄了一下午,才找到,选择最上面的节点,如下图,记录备用

  6. PAT 团体程序设计天梯赛-练习集 L1-018. 大笨钟

    微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉.不过由于笨钟自己作息也不是很规律,所以敲钟并不定时.一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那 ...

  7. POJ 1740 A New Stone Game(多堆博弈找规律)

    传送门 //有n堆,AB轮流从n堆的一堆中移任意个,可以扔掉,也可以移给其他堆中的一堆 //最先移完的胜 //如果n堆中两两堆数目相等,那肯定是B胜 //但只要有非两两相同的,如xyz,A先, //A ...

  8. Python学习笔记第一天

    Python是一门通用脚本语言,灵活,实用,而不用关心本身的实现逻辑! Python通常在linux下编程,有两种方式!当然,为了使用linux文本编辑,所选模式为 非 交互模式! 交互式:简单,方便 ...

  9. HDU 1009 FatMouse' Trade(贪心)

    FatMouse' Trade Problem Description FatMouse prepared M pounds of cat food, ready to trade with the ...

  10. 修改textField的placeholder的字体和颜色

    textField.placeholder = @"username is in here!"; [textField setValue:[UIColor redColor] fo ...