添加query_mysql方法,代码如下:function fetch_array($query, $result_type = MYSQL_ASSOC) {
return is_resource($query) ? mysql_fetch_array($query, $result_type) : $query[0];
}
function query_memcache($sql, $type = '''') {
global $mem,$memcachelife;
$key = md5($sql);
if(!($query = $mem->get($key))) {
$query = $this->query($sql, $type);
while($item = $this->fetch_array($query)) {
$res[] = $item;
}
$query = $res;
$mem->set($key, $query , 0, $memcachelife);
}
return $query;
}
function query($sql, $type = '''') {
global $debug, $discuz_starttime, $sqldebug, $sqlspenttimes;
$func = $type == ''UNBUFFERED'' && @function_exists(''mysql_unbuffered_query'') ?
''mysql_unbuffered_query'' : ''mysql_query'';
if(!($query = $func($sql, $this->link)) && $type != ''SILENT'') {
$this->halt(''MySQL Query Error'', $sql);
}
if(substr($sql, 0, 6) == ''SELECT'') {
echo ''<font color="red">Cache SQL</font>:<font color="green">''.$sql.''</font><br /><br />'';
} else {
echo ''<font color="red">Flash SQL</font>:<font color="green">''.$sql.''</font><br /><br />'';
}
$this->querynum++;
return $query;
}
4.将需要使用Memcache缓存的SQL查询的代码由
$db->query(
修改为
$db->query_memcache(
注意并将
while($post = $db->fetch_array($query)) {
修改为
foreach($query as $post) {
没有while的$db->fetch_array可以不用修改。
下面代码有用得着的就拿去:
preg_replace("/while\([$](\w+)\s*\=\s*[$]db->fetch_array\([$]query\)\)/is", "foreach(\$query as \$\\1)", $file);
回头放出个小工具批量替换下就可以了。
在EditPlus中可以这样替换:while\([$](.*) = [$]db->fetch_array\([$]query\)\)替换为foreach($query as $\1)
5.完成了,测试吧!~