class DB
{
/*获取表名*/
function table($table) {
return DB::_execute('table_name', $table);
}
/*删除*/
function delete($table, $condition, $limit = 0, $unbuffered = true) {
if(empty($condition)) {
$where = '1';//表达式为空,则where 1 网上有这方面的说明,不过我还没看懂什么意思,1=1为永真,1<>1为永假
} elseif(is_array($condition)) {
$where = DB::implode_field_value($condition, ' AND ');//若为数组,进行分隔,
} else {
$where = $condition;
}
$sql = "DELETE FROM ".DB::table($table)." WHERE $where ".($limit ? "LIMIT $limit" : '');//生成sql语句
return DB::query($sql, ($unbuffered ? 'UNBUFFERED' : ''));//执行
}
/*插入*/
function insert($table, $data, $return_insert_id = false, $replace = false, $silent = false) {
$sql = DB::implode_field_value($data);//分隔数组
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';//选择是replace into 或 insert into
$table = DB::table($table); //获取表
$silent = $silent ? 'SILENT' : '';//这个是指查询类型,一般分两种mysql_query和mysql_unbuffered_query,默认为mysql_query
$return = DB::query("$cmd $table SET $sql", $silent);//生成sql语句
return $return_insert_id ? DB::insert_id() : $return;//返回新插入的行的id
}
/*更新*/
function update($table, $data, $condition, $unbuffered = false, $low_priority = false) {
$sql = DB::implode_field_value($data);//分隔数组
//low_priority意为低优先级,在网上大致查了下,意思是它的优先级不会高于读操作
//假如在写的时候,有一个读的操作,那么系统允许,把读操作插入到写前面,等读完了,再写
$cmd = "UPDATE ".($low_priority ? 'LOW_PRIORITY' : '');
$table = DB::table($table);//获取表名
$where = '';
if(empty($condition)) {//判断表达式
$where = '1';
} elseif(is_array($condition)) {
$where = DB::implode_field_value($condition, ' AND ');
} else {
$where = $condition;
}
$res = DB::query("$cmd $table SET $sql WHERE $where", $unbuffered ? 'UNBUFFERED' : '');//生成sql语句
return $res;//返回执行结果
}
/*分隔数组*/
function implode_field_value($array, $glue = ',') {
$sql = $comma = '';
foreach ($array as $k => $v) {
$sql .= $comma."`$k`='$v'";
$comma = $glue;
}
return $sql;
}
/*获取插入新行的id*/
function insert_id() {
return DB::_execute('insert_id');
}
/*生成关联数组*/
function fetch($resourceid, $type = MYSQL_ASSOC) {
return DB::_execute('fetch_array', $resourceid, $type);
}
/*获取结果集中的第一行数据*/
function fetch_first($sql) {
DB::checkquery($sql);
return DB::_execute('fetch_first', $sql);
}
/*返回结果集中的某一行*/
function result($resourceid, $row = 0) {
return DB::_execute('result', $resourceid, $row);
}
/*返回结果集中的第一行*/
function result_first($sql) {
DB::checkquery($sql);
return DB::_execute('result_first', $sql);
}
/*执行查询*/
function query($sql, $type = '') {
DB::checkquery($sql);//过滤sql语句
return DB::_execute('query', $sql, $type);
}
/*select语句查询所影响的行数*/
function num_rows($resourceid) {
return DB::_execute('num_rows', $resourceid);
}
/*update,insert,delete语句所影响的行数*/
function affected_rows() {
return DB::_execute('affected_rows');
}
/*释放内存*/
function free_result($query) {
return DB::_execute('free_result', $query);
}
/*输出错误信息*/
function error() {
return DB::_execute('error');
}
/*获取错误编号*/
function errno() {
return DB::_execute('errno');
}
//DB::_execute('table_name', $table)
//相当于$res = $db->table_name($table);
function _execute($cmd , $arg1 = '', $arg2 = '') {
static $db;
if(empty($db)) $db = & DB::object();//创建db_mysql对象
$res = $db->$cmd($arg1, $arg2);
return $res;
}
/*实例化db_mysql对象*/
function &object() {
static $db;
if(empty($db)) $db = new db_mysql();
return $db;
}
/*检查sql语句*/
function checkquery($sql) {
static $status = null, $checkcmd = array('SELECT', 'UPDATE', 'INSERT', 'REPLACE', 'DELETE');
if($status === null) $status = getglobal('config/security/querysafe/status');
if($status) {
$cmd = trim(strtoupper(substr($sql, 0, strpos($sql, ' '))));
if(in_array($cmd, $checkcmd)) {
$test = DB::_do_query_safe($sql);
if($test < 1) DB::_execute('halt', 'security_error', $sql);
}
}
return true;
}
/*过滤sql语句*/
function _do_query_safe($sql) {
static $_CONFIG = null;
if($_CONFIG === null) {
$_CONFIG = getglobal('config/security/querysafe');
}
$sql = str_replace(array('\\\\', '\\\'', '\\"', '\'\''), '', $sql);
$mark = $clean = '';
if(strpos($sql, '/') === false && strpos($sql, '#') === false && strpos($sql, '-- ') === false) {
$clean = preg_replace("/'(.+?)'/s", '', $sql);
} else {
$len = strlen($sql);
$mark = $clean = '';
for ($i = 0; $i <$len; $i++) {
$str = $sql[$i];
switch ($str) {
case '\'':
if(!$mark) {
$mark = '\'';
$clean .= $str;
} elseif ($mark == '\'') {
$mark = '';
}
break;
case '/':
if(empty($mark) && $sql[$i+1] == '*') {
$mark = '/*';
$clean .= $mark;
$i++;
} elseif($mark == '/*' && $sql[$i -1] == '*') {
$mark = '';
$clean .= '*';
}
break;
case '#':
if(empty($mark)) {
$mark = $str;
$clean .= $str;
}
break;
case "\n":
if($mark == '#' || $mark == '--') {
$mark = '';
}
break;
case '-':
if(empty($mark)&& substr($sql, $i, 3) == '-- ') {
$mark = '-- ';
$clean .= $mark;
}
break;
default:
break;
}
$clean .= $mark ? '' : $str;
}
}
$clean = preg_replace("/[^a-z0-9_\-\(\)#\*\/\"]+/is", "", strtolower($clean));
if($_CONFIG['afullnote']) {
$clean = str_replace('/**/','',$clean);
}
if(is_array($_CONFIG['dfunction'])) {
foreach($_CONFIG['dfunction'] as $fun) {
if(strpos($clean, $fun.'(') !== false) return '-1';
}
}
if(is_array($_CONFIG['daction'])) {
foreach($_CONFIG['daction'] as $action) {
if(strpos($clean,$action) !== false) return '-3';
}
}
if($_CONFIG['dlikehex'] && strpos($clean, 'like0x')) {
return '-2';
}
if(is_array($_CONFIG['dnote'])) {
foreach($_CONFIG['dnote'] as $note) {
if(strpos($clean,$note) !== false) return '-4';
}
}
return 1;
}
}
分享到:
相关推荐
为了帮助用户更顺利地搭建和使用Discuz X1.5论坛系统,本文将详细解读《Discuz X1.5使用手册》中的关键步骤和要点,从而为用户提供一份清晰、实用的操作指南。 首先,我们要明确搭建Discuz X1.5论坛系统的基本要求...
2. 下载解压:获取"Discuz_X1.5_SC_GBK.dz1.5论坛"压缩包,解压后得到"upload"目录,这是论坛的安装文件。 3. 数据库配置:创建MySQL数据库,并记录数据库名、用户名、密码。 4. 安装向导:访问服务器上"upload...
【标题】"DISCUZ X1.5 2.0 游戏插件"涉及到的是一个针对DISCUZ论坛系统的游戏扩展应用。DISCUZ是一款非常流行的开源社区论坛软件,它允许用户创建和管理自己的在线论坛,提供丰富的功能和自定义选项。X1.5和X2.0是该...
discuz x1.5 wap 手机接口,拷贝到论坛根目录即可 WAP 2.3比之前的版本更新的细节如下: --贴子界面优化。 --自动读取标题。 --增加置顶贴区别。 --页面直接显示用户。 --修复登录BUG。(要是你登录还有问题,我也...
discuz!x1.5数据表的说明文档,包含所有的表的说明,。定义,等等
### discuz X1.5论坛部署(Windows) #### 一、概述 本文旨在详细介绍如何在Windows环境下部署Discuz X1.5论坛系统。通过本文,您将了解到完整的部署流程,包括系统环境的准备、所需软件的选择及安装、环境变量的...
X1.5 经典版:中国SNS源码的里程碑》 Discuz! X1.5经典版,作为中国社交网络服务(SNS)领域的一款标志性产品,自发布以来就受到了广大站长和开发者的热烈追捧。这款开源的论坛软件,以其强大的功能、稳定的表现...
X1.5是一款深受用户喜爱的论坛系统,其设计目标是提供高效、易用且功能丰富的网络社区平台。在Discuz!X1.5版本中,开发者着重提升了系统的性能和用户体验,通过一系列的改进使论坛更具吸引力。 首先,广场作为论坛...
X1.5导航插件是一款专为Discuz! X1.5平台设计的强大辅助工具,它旨在帮助用户更好地管理和优化社区网站的导航功能,提升用户体验,增强网站的互动性和实用性。这款插件在www.58119.com上有着生动的展示,通过实际...
在Discuz_X1.5_SC_UTF8中使用UTF-8编码,意味着论坛可以无缝处理中文信息,无论是用户注册、发帖还是评论,都能保证文字的正确显示。 4. **文件结构解析** - **upload**:这个目录通常包含了论坛所需的静态资源,...
X2 & X1.5" 是一个针对Discuz!论坛系统的插件,旨在实现一种特殊的社区运营策略,即用户需要付费才能查看某些特定的帖子。这个插件主要用于那些希望增加社区内容价值,或者通过内容收费来获取额外收入的Discuz!论坛...
这款源码是康盛创想在X1.5版本时发布的产品,集成了许多先进特性和优化,旨在提供更好的用户体验和管理效率。 1. **框架与技术栈** Discuz! X1.5 使用PHP作为后端编程语言,这使得它在性能和跨平台性上具有优势。...
Discuz!X1.5 数据结构说明书.CHM
X1.5:搭建与优化指南》 Discuz! X1.5作为一款知名的社区论坛软件,以其强大的功能和易用性深受广大用户喜爱。这款正式版无任何限制,为用户提供了一个自由度极高的平台,无论你是个人用户还是企业组织,都可以...
X 1.5 远程图片本地化插件"是提升Discuz! X 1.5 论坛性能的有效工具,通过自动抓取和存储远程图片,解决了图片加载慢的问题,改善了用户浏览体验。正确安装和配置这个插件,将为你的论坛运营带来显著的效益。
X 1.5 URF-8:中文版深度解析》 Discuz! X 1.5是一款由Comsenz公司开发的社区论坛软件,它以其强大的功能、高效的性能以及良好的用户体验,在国内互联网社区建设领域占据了重要的地位。URF-8,即Unicode Right-to-...
X1.5版本,这是一个非常流行的开源社区论坛软件,广泛应用于各类网站,为用户提供互动交流平台。 首先,我们需要了解Discuz!X1.5的基本功能。Discuz!X1.5是Comsenz公司开发的一款社区论坛系统,它具有强大的管理...
X1.5是Discuz!论坛系统的一个版本,它是一款基于PHP和MySQL的社区建站软件,被广泛应用于搭建互动交流平台。本文将深入解析Discuz! X1.5的数据库结构,帮助您更好地理解和管理您的论坛数据。 在Discuz! X1.5中,...
X1.5音乐插件"是一个专门为Discuz! X1.5版本论坛设计的扩展功能,旨在为用户带来丰富的在线音乐体验。这个插件的安装和使用,可以让论坛用户在浏览帖子的同时享受音乐播放,提升社区的互动性和娱乐性。 【描述】...
### Discuz X1.5 目录结构解析 #### 一、概述 Discuz! X1.5是一款非常流行的开源论坛软件,它基于PHP+MySQL技术构建,具有强大的功能和高度可定制性。本文将详细介绍Discuz! X1.5的目录结构,帮助开发者更好地理解...