DEDECMSV3 文件代码流程功能分析(3),希望有助于dedecms整合,扩展
dede很多时候用dede_后面加表,好处是,大家可以安装时,定义自己的表的前缀,这样安全性提高了,
那么,dede_,dede是怎么处理的,很轻易想到,在mysql类库处理里面替换dede_为表的前缀,
关于dede_替换过程:
首先找到的是./include/pub_db_mysql.php
行252 有
function SetQuery($sql){}
处理这个这个替换过程
具体的处理看:
256行有:$prefix="dede_";
262行有:$np = strlen($prefix);
263行有:$restr = '';
267行有:$test = substr($sql, $j, $np);
好在看286行:
CODE:
if ($test == $prefix && !$inQuote)
{
$restr .= $this->dbPrefix;
$j = $np-1;
}
[Copy to clipboard]
当我们获得sql语句中有dede_,那么$restr前面就加载表头。
注重:264行 for($j=0; $j < $n; $j ){}循环语句
我在想,为什么dedecms要用for循环对sql语句的每个字符都要严格过滤,也是出于安全考虑,防止sql注入
另外:我看到了266行:$c = $sql{$j};后来查了手册:
手册是这么解释的:
访问字符串中的字符
字符串中的字符可以通过在字符串之后用花括号指定所要字符从零开始的偏移量来访问。