/** * 保存所有更改,第一个参数是事务开关 * Enter description here ... * @param string $transaction */ public static function save($transaction = false) { if (empty(self::$_writeSpace)) { return true; } //没有动作语句,返回成功 $sqls = array(); foreach (self::$_writeSpace as $one) { if ($one['type'] == 'Insert') { $keys = array(); foreach ($one['rows'] as $key => $value) { $keys[] = $key; } $sql = 'insert into ' . $one['table'] . ' ' . '(' . implode(',', $keys) . ')' . ' VALUES(' . '\'' . implode('\',\'', $one['rows']) . '\'' . ')'; } elseif ($one['type'] == 'Update') { $rows = array(); foreach ($one['rows'] as $key => $value) { $rows[] = $key . '=' . '\'' . $value . '\''; } $sql = 'update ' . $one['table'] . ' set ' . implode(',', $rows) . ' where ' . parent::_conditionParser($one['table'], $one['condition']); } elseif ($one['type'] == 'Delete') { $sql = 'delete from ' . $one['table'] . ' where ' . parent::_conditionParser($one['table'], $one['condition'] . ';'); } else { $sql = ''; continue; } $sqls[] = $sql; } if ($transaction) { self::_connect()->runSql('START TRANSACTION'); foreach ($sqls as $sqlObj) { $succeed = self::_connect()->runSql($sqlObj); if (!$succeed) { self::_connect()->runSql('ROLLBACK'); self::_connect()->runSql('END'); return false; } } self::_connect()->runSql('COMMIT'); self::_connect()->runSql('END'); } else { foreach ($sqls as $sqlObj) { $succeed = self::_connect()->runSql($sqlObj); } } //表级的缓存清扫 if (self::$_gilConfig['db_resultCache']) { foreach (self::$_writeSpace as $one) { self::cleanCacheByTable($one['table']); } } //end if ($succeed) { self::$_writeSpace = array(); } //清空所有请求 return $succeed; }
//GilSession::set('hello','hi'); //GilSession::del('hello'); //echo GilSession::get('hello'); //exit; /** * 我们在数据库中有2个表 * test表 列 id name * b表 列bid name * 下面,我们来读取数据试试看 */ //$result = gilDB::findSql('select * from test');//单独地运行SQL语句,读表 //需要特别注意,这里需要自行过滤危险字符串 //print_r($result); //exit; //GilCache::set('1', 'nihso', '123');//这里示范了key=>value式的缓存写入,默认使用了File引擎缓存,请在gilFramework下建立一个tmp文件夹用于存放临时文件 //echo GilCache::get('1'); /** * 下面用伪语句的方法读取数据库,这是推荐的方式 */ //GilDB::cleanCacheByTable('b');//这是比较高级的功能,用于清除MYSQL结果缓存 GilDB::select('test', '', 'id asc', '0,30', 'id,name as aname'); //获取test表,条件是id为1,排序 id asc,分页0,30,获取id和name列,其中name命名为aname,这里除了表名,其它都是可选的 GilDB::link('bdata', 'b', array('aname' => 'name'), 'bid,name'); //关联查询,常用于一对多,这里查询b表,查询得到的结果插入到主查询数组的bdata键中,查询限制的条件是上一句的aname数据等于b表的name值,除了返回字段后,其它都是必填的 //gilDB::join('b',array('test.id'=>'b.bid'));//join查询,常用于一对一,这里表示查询b表,条件是test.id=>b.bid,注意,条件中b.bid必须放在值中 //gilDB::findSql('delete from test');//我们开启了强制只读功能,如果你将此句注释去掉,那里,程序会停止执行 $result = GilDB::findAll(); //只有到这里,数据库结果才真正出来了! //print_r(GilDB::getPager()); print_r($result); //请留意,我们在配置文件中开启了结果缓存功能,当下次执行这个文件的时候,程序会直接读取缓存文件,关于这个,可以详看手册
<?php defined('GILPATH') or define('GILPATH', dirname(__FILE__) . '/'); require GILPATH . '/GilFunctions.php'; if (isset($gilConfig)) { $gilConfig = array_merge(require GILPATH . '/GilConfig.php', $gilConfig); } else { $gilConfig = (require GILPATH . '/GilConfig.php'); } GilDB::$_gilConfig = $gilConfig; if ($gilConfig['oo']) { GilController::init(); }
protected static function _getQueryCache() { $hash = 'DBCACHE_' . md5(serialize(self::$_selectSpace)); if (self::$_gilConfig['db_processCache'] && isset(self::$_processCache[$hash])) { return self::$_processCache[$hash]; } //优先返回进程内缓存 if (self::$_gilConfig['db_resultCache']) { return GilCache::get($hash); } //若进程内缓存不存在,则返回非持久化缓存 self::$_queryTimeNeedle = microtime(); //定义一个时间起点,以检测缓存 return false; //均不存在,返回bool false }