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. debian8上安装pyspider - pyspider中文文档 - pyspider中文网

    debian8上安装pyspider - pyspider中文文档 - pyspider中文网   #apt-get install python python-dev python-distribu ...

  2. ios:设置视图背景图片的方法

    1. 使用一个UIImageView实例做子视图,并且放最后面UIImageView *customBackgournd = [UIImageView alloc] initWithImage:[UI ...

  3. Two PWM outputs from MCU combine to form a monotonic 16-bits DAC

    http://www.edn.com/design/analog/4329365/Combine-two-8-bit-outputs-to-make-one-16-bit-DAC

  4. Eclipse 结合Tomcat开发Web应用

    第一部分 配置Tomcat 先到Apache官方网站下载Tomcat:http://tomcat.apache.org/.  但是在你下载Tomcat时,首选确定你的Eclipse支持的Tomcat版 ...

  5. 固定的价格就意味着背叛——《practices of an agile developper》

    “对这个项目,我们必须要有固定的报价.虽然我们还不清楚项目的具体情况,但仍要有一个报价.到星期一,我需要整个团队的评估,并且我们必须要在年末交付整个项目.” Venkat & Andy 提出了 ...

  6. Andorid之Annotation框架初使用(五)

    注入res文件夹的资源: @StringRes @EActivity public class MyActivity extends Activity { @StringRes(R.string.he ...

  7. MySQL year函数

    mysql的日期函数,示例如下:

  8. jquery动态创建表格

    1.代码实例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  9. Axure Beta 7.0 汉化版下载

    Axure的最新版本下载地址如下 安装文件地址: PC版下载地址:点我下载  Mac版下载地址:点我下载 下载后下载汉化包即可进行汉化(含中文部件库) 汉化文件:点我下载 -------------- ...

  10. luigi操作hive表

    关于luigi框架下查询hive表的操作 class JoinQuery(HiveQueryTask): date=luigi.DateParameter() def hiveconfs(self): ...