$fields = preg_replace('/([a-zA-Z0-9_]+)\.([a-zA-Z0-9_*]+)/', function($r) { return $this->_getFieldTable($r[1]) . $r[2]; }, $fields); 报错 Object of class Closure could not be converted to string
15,16行我是用xuzuning大神的。 //$fields = preg_replace('/([a-zA-Z0-9_]+)\.([a-zA-Z0-9_*]+)/e', "\$this->_getFieldTable('\\1') . '.\\2'", $fields); $fields = preg_replace_callback('/([a-zA-Z0-9_]+)\.([a-zA-Z0-9_*]+)/', function($r) {return $this->_getFieldTable($r[1]) . $r[2];}, $fields); //$fields = preg_replace_callback('/([a-zA-Z0-9_]+)\.([a-zA-Z0-9_*]+)/',function($r){ return $this->_getFieldTable($r(1) . $r(2));}, $fields); return $fields;组合的查询语句是这个样子的 MySQL Error[1054]: Unknown column 'user_privprivs' in 'field list' MySQL Query:SELECT user_privprivs, sstore_name,user_privuser_id,s.store_id FROM ecm_store s LEFT JOIN ecm_user_priv user_priv ON s.store_id = user_priv.store_id WHERE user_priv.user_id IN ('1') ORDER BY sstore_id DESC Wrong File: \eccore\model\mysql.php[534]正确的应该是这个样子 SELECT user_priv.privs, s.store_name,user_priv.user_id,s.store_id FROM ecm_store s LEFT JOIN ecm_user_priv user_priv ON s.store_id = user_priv.store_id WHERE user_priv.user_id IN ('1') ORDER BY s.store_id DESC 错误的问题是: user_priv.privs和user_priv.user_id和s.store_id重点引用“.”都没有了。
return $this->_getFieldTable($r[1]) . $r[2];
}, $fields);
return $this->_getFieldTable($r[1]) . $r[2];
}, $fields);
报错
Object of class Closure could not be converted to string
**
* 获取查询时的字段列表
*
* @author Garbin
* @param string $src_fields_list
* @return string
*/
function getRealFields($src_fields_list)
{
$fields = $src_fields_list;
if (!$src_fields_list)
{
$fields = '';
}
//$fields = preg_replace('/([a-zA-Z0-9_]+)\.([a-zA-Z0-9_*]+)/e', "\$this->_getFieldTable('\\1') . '.\\2'", $fields);
$fields = preg_replace_callback('/([a-zA-Z0-9_]+)\.([a-zA-Z0-9_*]+)/', function($r) {return $this->_getFieldTable($r[1]) . $r[2];}, $fields);
//$fields = preg_replace_callback('/([a-zA-Z0-9_]+)\.([a-zA-Z0-9_*]+)/',function($r){ return $this->_getFieldTable($r(1) . $r(2));}, $fields);
return $fields;
} /**
* 解析字段所属
*
* @author Garbin
* @param string $owner
* @return string
*/
function _getFieldTable($owner)
{
if ($owner == 'this')
{
return $this->alias;
}
else
{
$m =& m($owner);
if ($m === false)
{
/* 若没有对象,则原样返回 */ return $owner;
} return $m->alias;
}
}
//$fields = preg_replace('/([a-zA-Z0-9_]+)\.([a-zA-Z0-9_*]+)/e', "\$this->_getFieldTable('\\1') . '.\\2'", $fields);
$fields = preg_replace_callback('/([a-zA-Z0-9_]+)\.([a-zA-Z0-9_*]+)/', function($r) {return $this->_getFieldTable($r[1]) . $r[2];}, $fields);
//$fields = preg_replace_callback('/([a-zA-Z0-9_]+)\.([a-zA-Z0-9_*]+)/',function($r){ return $this->_getFieldTable($r(1) . $r(2));}, $fields);
return $fields;组合的查询语句是这个样子的
MySQL Error[1054]: Unknown column 'user_privprivs' in 'field list'
MySQL Query:SELECT user_privprivs, sstore_name,user_privuser_id,s.store_id FROM ecm_store s LEFT JOIN ecm_user_priv user_priv ON s.store_id = user_priv.store_id WHERE user_priv.user_id IN ('1') ORDER BY sstore_id DESC
Wrong File: \eccore\model\mysql.php[534]正确的应该是这个样子
SELECT user_priv.privs, s.store_name,user_priv.user_id,s.store_id FROM ecm_store s LEFT JOIN ecm_user_priv user_priv ON s.store_id = user_priv.store_id WHERE user_priv.user_id IN ('1') ORDER BY s.store_id DESC
错误的问题是: user_priv.privs和user_priv.user_id和s.store_id重点引用“.”都没有了。
return $this->_getFieldTable($r[1]) . ".$r[2]";
}, $fields);
/**
* 替换模块中图片路径
*
* @author liupeng
* @param string $source 内容
* @return string
**/
function smarty_prefilter_preCompile($source)
{
$file_type = strtolower(strrchr($this->_current_file, '.'));
$tmp_dir = '' ; /* 替换文件编码头部 */
if (strpos($source, "\xEF\xBB\xBF") !== FALSE)
{
$source = str_replace("\xEF\xBB\xBF", '', $source);
}
if ($this->store_id > 0)
{
if (strpos($this->_current_file, '/mall/resource') !== false)
{
$mall_skin = $this->options['mall_skin'];
$tmp_dir = "themes/mall/skin/$mall_skin/" ;
}
else
{
$tmp_dir = "themes/store/skin/" . $this->skin . '/' ;
}
}
else {
$tmp_dir = "themes/mall/skin/" . $this->skin . '/' ;
} $pattern = array(
'/<!--[^>|\n]*?({.+?})[^<|{|\n]*?-->/', // 替换smarty注释
'/<!--[^<|>|{|\n]*?-->/', // 替换不换行的html注释
'/(href=["|\'])\.\.\/(.*?)(["|\'])/i', // 替换相对链接
'/((?:background|src)\s*=\s*["|\'])(?:\.\/|\.\.\/)?(images\/.*?["|\'])/is', // 在images前加上 $tmp_dir
'/((?:background|background-image):\s*?url\()(?:\.\/|\.\.\/)?(images\/)/is', // 在images前加上 $tmp_dir
'/{nocache}(.+?){\/nocache}/ise', //无缓存模块
);
$replace = array(
'\1',
'',
'\1\2\3',
'\1' . $tmp_dir . '\2',
'\1' . $tmp_dir . '\2',
"'{insert name=\"nocache\" ' . '" . $this->_echash . "' . base64_encode('\\1') . '}'",
); return preg_replace($pattern, $replace, $source);
}
$source = preg_replace_callback(
'/{nocache}(.+?){\/nocache}/is',
function($r) {
return '{insert name="nocache" ' . $this->_echash . base64_encode($r[1]) . '}';
}, $source);
function fetch_str($source)
{
if (!defined('IS_BACKEND'))
{
$source = $this->smarty_prefilter_preCompile($source);
}
return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);
}
你脱去外层的引号就对了function($r) {
return $this->select($r[1]);
}