当我在搜索Magento打开sql查询日志记录时,我发现了一条修改了Magento核心query
函数的帖子,如下所示:
public function query($sql, $bind = array())
{
$this->_debugTimer();
try {
$sql = (string)$sql;
if (strpos($sql, ':') !== false || strpos($sql, '?') !== false) {
$this->_bindParams = $bind;
$sql = preg_replace_callback('#(([\'"])((2)|((.*?[^\])2)))#', array($this, 'proccessBindCallback'), $sql);
$bind = $this->_bindParams;
}
$code = 'SQL: ' . $sql . "rn";
if ($bind) {
$code .= 'BIND: ' . print_r($bind, true) . "rn";
}
$this->_debugWriteToFile("[".date('Y-m-d H:i:s')."] ".$code);
$result = parent::query($sql, $bind);
}
catch (Exception $e) {
$this->_debugStat(self::DEBUG_QUERY, $sql, $bind);
$this->_debugException($e);
}
$this->_debugStat(self::DEBUG_QUERY, $sql, $bind, $result);
return $result;
}
我没有得到的是为什么这里需要preg_replace_callback
以及当我在编辑器中放入上述代码时,在语法中包含preg_replace_callback
的行中出现的问题是什么?
有什么建议吗?
答案 0 :(得分:0)
你在[^ \]附近的regexp中有错误,这是对的
'#(([\'"])((2)|((.*?[^\\])2)))#'
对于php字符串,你还需要转义一些字符
$re = "/#(([\\'\"])((2)|((.*?[^\\\\])2)))#/";
$str = "";`
preg_match($re, $str, $matches);
我不使用https://regex101.com/来检查和调试regexp。