0

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); 

結果のprint_r $x

array(
  array('inner' => 'person = :pk'),
  array('inner' => 'person = :pk'),
  array('left' => 'person = :pk AND excluded IS NULL')
);

前もって感謝します

@編集:タイプミスを見逃す

4

1 に答える 1

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;
}
于 2013-03-17T18:07:39.267 に答える