我在PHP中有一个包含这样的东西的数组字符串:
$a = array(
array('inner' => 'N.person = P.id'),
array('inner' => 'L.person = P.id'),
array('left' => 'A.person = P.id AND A.excluded IS NULL')
);
我想通知主键P.id
并从sql中删除所有别名,结果如下:
$x = someFunctionThatSanitizeSQL('P.id', $a);
在$x
结果上的print_r:
array(
array('inner' => 'person = :pk'),
array('inner' => 'person = :pk'),
array('left' => 'person = :pk AND excluded IS NULL')
);
提前致谢
@edit:错过拼写错误
答案 0 :(得分:1)
执行str_replace($pkreplace, ':pk', $mystring);
后,我认为你正在寻找的正则表达式是这样的:
/(?=(^|\w))[A-Z0-9_-]+\./
例如,要清除每个字符串,可以执行
preg_replace('/(?=(^|\w))[A-Z0-9_-]+\./i', '', $mystring);
但是,如果要删除A.
,L.
等,则查询可能存在其他问题,因为这些值不再位于数据库表下,并且可能导致不明确的值错误。您确定这是您在查询中想要的行为吗?
修改强>
你的函数的最终实现看起来像(假设你需要数组):
function someFunctionThatSanitizeSQL($pkreplace, $dataarray) {
if (!is_array($dataarray))
return null;
$retval = array();
foreach ($dataarray as $key => & $curentry) {
$curstring = str_replace($pkreplace, ':pk', $curentry);
$curstring = preg_replace('/(?=(^|\w))[A-Z0-9_-]+\./i', '', $curstring);
$retval[$key] = $curstring;
}
return $retval;
}