private function escapeAnsi($query)
{
if (preg_match("/^select /i",$query)&&!preg_match("/^select(.*)from/ims",$query))
$query.= ' FROM DUAL';
$search = array ('/("\w+?")/e',
"/([^\s\(]+) & ([^\s]+) = ([^\s\)]+)/",
"/([^\s\(]+) & ([^\s]+) <> ([^\s\)]+)/", // bitand
'/^RELEASE SAVEPOINT (.*)$/');
$replace = array ("strtoupper('\\1')",
"BITAND(\\1,\\2) = \\3",
"BITAND(\\1,\\2) <> \\3",
"begin null; end;");
return str_replace('\\"','"',preg_replace($search, $replace, $query));
}
private function escapeReserved($query)
{
$ddl= !((boolean)preg_match('/^(select|insert|update|delete)/i',$query));
$search = array ("/({)(\w+)(})/e", // escapes all table names
"/({L#)([0-9]+)(})/e", // escapes long id
"/(\:)(uid|session|file|access|mode|comment|desc|size|start|end)/e",
"/(<uid>|<session>|<file>|<access>|<mode>|<comment>|<desc>|<size>".($ddl?'':'|<date>').")/e",
'/([\(\.\s,\=])(uid|session|file|access|mode|comment|desc|size'.($ddl?'':'|date').')([,\s\=)])/e',
'/([\(\.\s,])(uid|session|file|access|mode|comment|desc|size'.($ddl?'':'|date').')$/e');
$replace = array ("'\"\\1'.strtoupper('\\2').'\\3\"'",
"'\"\\1'.strtoupper('\\2').'\\3\"'",
"'\\1'.'db_'.'\\2'.'\\3'",
"strtoupper('\"\\1\"')",
"'\\1'.strtoupper('\"\\2\"').'\\3'",
"'\\1'.strtoupper('\"\\2\"')");
return preg_replace($search, $replace, $query);
}
一共这两个函数。将return 用 preg_replace_callback 改写 。是drupal7里面的oracle驱动模块。
我开始直接删除 /e 或者直接return $query。 都会报不同的错误。
不改的话,php又过不了。
若吧php改成5.4 。oracle驱动又不认识。