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. javascript 日期对象

    1.日期对象定义 var Udate=new Date();//获得当前日期 2.Date对象中处理时间和日期的常用方法: 3.返回/设置年份 var mydate=new Date();//当前时间 ...

  2. 超链接解决头部fixed问题

    ///////////超链接解决头部fixed问题 $('a[href*=#]').click(function () { var top1 = $(".header").heig ...

  3. weex 语法高亮

    @1.ctrl+shift+p,调出控制命令面板,@2.输入pic,点击进入 @3.输入vue Syntax Highlight,等待下载 所有的sublime下载插件同理. vue Syntax H ...

  4. 如何使用Java、Servlet创建二维码

    归功于智能手机,QR码逐渐成为主流,它们正变得越来越有用.从候车亭.产品包装.家装卖场.汽车到很多网站,都在自己的网页集成QR码,让人们快速找到它们.随着智能手机的用户量日益增长,二维码的使用正在呈指 ...

  5. Nginx1.8.0版本平滑升级新版本1.9.7

    原文:http://www.jb51.net/article/79878.htm 首先查看现在环境nginx的版本为1.8.0 编译的参数只指定了安装路径: 复制代码代码如下: [root@local ...

  6. 9.hibernate的一对一映射

    一.hibernate的一对一按照外键映射 1.创建如下sql脚本: --员工账号表 create table USERS1 ( USERID ) not null, USERNAME ), USER ...

  7. Zeppelin添加mysql解释器

    安装Apache zeppelin 1 wget http://apache.fayea.com/zeppelin/zeppelin-0.6.2/zeppelin-0.6.2-bin-all.tgz ...

  8. HDU 1242 Rescue(BFS),ZOJ 1649

    题目链接 ZOJ链接 Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The ...

  9. LeetCode OJ 54. Spiral Matrix

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

  10. Excel补全日期(日期按顺序补全)

    1.给出的数据 2.想补全缺失的日期,比如2015/3/1,2015/3/2,... 1)在D列输入完整的日期,如下图所示: 2)在E2处写函数“=IF(ISERR(VLOOKUP(D2,B:C,2, ...