ecshop操作数据库类
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,文件内容如下:
- <?php
- define('IN_ECS', true);
- define('EC_CHARSET', 'utf-8');
- define('ROOT_PATH', 'D:/Program Files/Zend/Apache2/htdocs/ecshop/');
- define('DATA_DIR', 'data');
- $db_host = "localhost:3306";
- $db_name = "ecshop";
- $db_user = "root";
- $db_pass = "";
- require('../includes/cls_mysql.php');
- $db = new cls_mysql($db_host, $db_user, $db_pass, $db_name);
获取所有记录
getAll方法用来从数据库中获取满足条件的所有记录。getAllCached是它的缓存版本,cache key是该方法的第二个参数,如果缓存有效,直接返回缓存结果,否则重新执行数据库查询。
将下面的代码加到test_mysql.php的最后:
- test_getAll();
- function test_getAll()
- {
- global $db;
- $sql = "SELECT user_id, user_name, email FROM ecs_admin_user";
- $result = $db->getAll($sql);
- print_r($result);
- }
修改以后的test_mysql.php执行结果如下:
- Array
- (
- [0] => Array
- (
- [user_id] => 1
- [user_name] => admin
- [email] => admin@admin.com
- )
- [1] => Array
- (
- [user_id] => 2
- [user_name] => bjgonghuo1
- [email] => bj@163.com
- )
- [2] => Array
- (
- [user_id] => 3
- [user_name] => shhaigonghuo1
- [email] => shanghai@163.com
- )
- [3] => Array
- (
- [user_id] => 4
- [user_name] => amonest
- [email] => amonest@foxmail.com
- )
- )
获取单行记录
getRow方法用来从数据库中获取满足条件的单行记录,或者说是第一条记录。getRowCached是它的缓存版本,cache key是该方法的第二个参数,如果缓存有效,直接返回缓存结果,否则重新执行数据库查询。
将下面的代码加到test_mysql.php的最后:
- test_getRow();
- function test_getRow()
- {
- global $db;
- $sql = "SELECT user_id, user_name, email FROM ecs_admin_user LIMIT 1";
- $result = $db->getRow($sql);
- print_r($result);
- }
修改以后的test_mysql.php执行结果如下:
- Array
- (
- [user_id] => 1
- [user_name] => admin
- [email] => admin@admin.com
- )
获取某栏位的所有值
getCol方法用来从数据库中获取满足条件的某个栏位的所有值。getColCached是它的缓存版本,cache key是该方法的第二个参数,如果缓存有效,直接返回缓存结果,否则重新执行数据库查询。
将下面的代码加到test_mysql.php的最后:
- test_getCol();
- function test_getCol()
- {
- global $db;
- $sql = "SELECT email FROM ecs_admin_user";
- $result = $db->getCol($sql);
- print_r($result);
- }
修改以后的test_mysql.php执行结果如下:
- Array
- (
- [0] => admin@admin.com
- [1] => bj@163.com
- [2] => shanghai@163.com
- [3] => amonest@foxmail.com
- )
获取单个值
getOne方法用来从数据库中获取满足条件的单个值。getOneCached是它的缓存版本,cache key是该方法的第二个参数,如果缓存有效,直接返回缓存结果,否则重新执行数据库查询。
将下面的代码加到test_mysql.php的最后:
- test_getOne();
- function test_getOne()
- {
- global $db;
- $sql = "SELECT email FROM ecs_admin_user WHERE user_id = 4";
- $result = $db->getOne($sql);
- print_r($result);
- }
修改以后的test_mysql.php执行结果如下:
执行数据库查询
query方法用来执行数据库查询,例如INSERT,UPDATE,DELETE等。
将下面的代码加到test_mysql.php的最后:
- test_query();
- function test_query()
- {
- global $db;
- $sql = "UPDATE ecs_admin_user SET todolist = '你有一封新邮件!' WHERE user_id = 4";
- $db->query($sql);
- $sql = "SELECT todolist FROM ecs_admin_user WHERE user_id = 4";
- $result = $db->getOne($sql);
- print_r($result);
- }
修改以后的test_mysql.php执行结果如下:
数据库表操作
autoExecute方法用来简化对数据表的INSERT和UPDATE。
将下面的代码加到test_mysql.php的最后:
- test_autoExecute();
- function test_autoExecute()
- {
- global $db;
- $table = "ecs_role";
- $field_values = array("role_name" => "总经理办", "role_describe" => "总经理办", "action_list" => "all");
- $db->autoExecute($table, $field_values, "INSERT");
- // 执行的SQL:INSERT INTO ecs_role (role_name, action_list, role_describe) VALUES ('总经理办', 'all', '总经理办')
- $role_id = $db->insert_id(); // 新记录的ID:5
- $field_values = array("action_list" => "goods_manage");
- $db->autoExecute($table, $field_values, "UPDATE", "role_id = $role_id");
- // 执行的SQL:UPDATE ecs_role SET action_list = 'goods_manage' WHERE role_id = 5
- $sql = "SELECT action_list FROM ecs_role WHERE role_id = $role_id";
- $result = $db->getOne($sql);
- print_r($result);
- }
修改以后的test_mysql.php执行结果如下:
- goods_manage
ecshop操作数据库类的更多相关文章
- 非常不错的ASP操作数据库类,支持多数据库MSSQL,ACCESS,ORACLE,MYSQL等
可同时操作多个不同类型的数据库. 完全不用考虑数据类型的差别,再也不用想字符型字段加不加单引号. 调用非常简单,对数据库的主要操作一般只需要一行代码. 支持mssql事务回滚. 可自动生成和输出sql ...
- PHP操作数据库类
<?php /** * 功能: 数据库操作类 . * 作者: 赵铭哲 * 日期: 2016-05-23 * 时间: 9:43 */ namespace ZH\DataBase; use \Exc ...
- Python操作数据库类 Oracle、Sqlserver、PostgreSQL
我在工作中经常使用Python,特点很明显,轻量,效率还不错,尤其在维护或者自动化方面. 下面是我使用到的访问数据库(Oracle.Sqlserver.PostgreSQL)的公共类. 一.Oracl ...
- C++ 操作数据库类
#pragma once #include <string> #include <windows.h> #include <algorithm> #include ...
- mybatis 操作数据库(05)
类型转换.动态排序,查询接口与mapper对应关系说明及其注意事项 一.MyBatis 自带写常见类型转换器.例如:java 类中 String 对应 mySQL中的varchar 二.自定义类型转换 ...
- 用于JDBC操作数据库的公共类
/* * @(#)CommonSql.java 2011-9-5 * * Copyright 2011 Bianjing,All rights reserved. */ import java.sql ...
- JDBC操作数据库 封装好的工具类
mysql sqlserver oracle 数据库的驱动jar包http://download.csdn.net/download/csdn576038874/8833683package cn.h ...
- SQLserver数据库操作帮助类SqlHelper
1 SqlHelper源码 using System; using System.Data; using System.Xml; using System.Data.SqlClient; using ...
- .NET使用DAO.NET实体类模型操作数据库
一.新建项目 打开vs2017,新建一个项目,命名为orm1 二.新建数据库 打开 SqlServer数据库,新建数据库 orm1,并新建表 student . 三.新建 ADO.NET 实体数据模型 ...
随机推荐
- linux基础命令学习(三)文件搜索 find
1.使用name选项 查找自己的根目录$Home中的文件,可以用: find ~ -name "*.log" -print 查找当前目录下的文件,可以用: find . -nam ...
- JavaFX学习之Web
PopupFeatures 处理新窗口 WebHistory 网页一般都带有历史记录的功能,可以回退,也可以前进,fx用WebHistory处理. final WebHistory wh = w ...
- Regulator IC forms convenient overvoltage detector
Figure 1 shows a simple, stand-alone overvoltage detector. The intent of the circuit is to monitor a ...
- obd2 J1962M to DB9
- directio mysql 编绎选项
http://www.myexception.cn/linux-unix/495407.html http://www.iyunv.com/thread-25950-1-1.html
- 玩转android自定义控件二——自定义索引栏listview
带索引栏的listview,在android开发非常普遍,方便用户进行字母索引,就像微信通讯录这样: 今天,我们就从零到一实现这个具有索引栏的listview. 怎么实现这个控件了,我们应当梳理出一个 ...
- The maximum number of processes for the user account running is currently , which can cause performance issues. We recommend increasing this to at least 4096.
[root@localhost ~]# vi /etc/security/limits.conf # /etc/security/limits.conf # #Each line describes ...
- java通过jacob来读取word转换为htm格式
转自:http://blog.csdn.net/chinapi_hzh/article/details/5798689 因为微软没有公开word源代码,所以直接用java流来读取word的后果是读出来 ...
- android基础知识普及
1.密度问题及相互转换 测试机 philips w732 480X800 density 1.5 scaledDensity 1.6500001 通过 context.getResources().g ...
- 命令方式启动安卓模拟器(M9)
H:\Android\M9SDK_windows_1.0\platforms\android-2.3.1>emulator.exe -sysdir H:\Android\M9SDK_window ...