2017-05-01 2 views
0

저는 데이터베이스에서 많은 테이블의 테이블 이름을 수정해야하므로 많은 SQL 쿼리를 수정해야하는 프로젝트가 있습니다.PHP는 백틱 내에서 점을 대체합니다.

는 지금 내 테이블의 모든 등 등 1.customers, 2.customers, 나는 이러한 1_customer을 업데이트해야 , 2_customers, 같은 이름을 가지고

는 역 따옴표 내의 모든 점을 대체 할 preg_replace이다 통하여 가능 예를 들어 밑줄

와 나는

"UPDATE `1.customers` SET `value` = '1.0'" 

가되고 싶은 것

"UPDATE `1_customers` SET `value` = '1.0'" 

약 50 개의 테이블이 있습니다.

+0

? 당신의 테이블이 이미 명명 되었기 때문에'preg_replace' 만 할 수는 없습니다. 'preg_replace'를하면 쿼리의 모양 만 바뀝니다. 실제로 이름을 변경해야합니다. –

+0

좋은 ide 's 발견과 교체는 더 안전 할 것입니다 – nogad

+0

약 50 개의 테이블. –

답변

0

일반 표현식의 캡처 그룹을 사용하여 점 앞뒤의 부분을 일치 시키므로 대체 대상으로 복사 할 수 있습니다.

$str = preg_replace_callback('/(`\d+)\.(\w+`)/', '$1_$2', $str); 

여기에는 각 이름에 점이 하나만 있다고 가정합니다. 그렇지 않은 경우 preg_replace_callback()을 사용하여 이름에 원하는 수의 점을 일치시킨 다음 콜백 함수에 str_replace()을 사용하여 모든 점을 밑줄로 바꿀 수 있습니다.

1

은 밑줄로 역 따옴표 내의 모든 점을 대체

$input = "UPDATE `1.customers` SET `value` = '1.0'"; 

$output = preg_replace_callback(
    '/`(.+?)`/', 
    function ($matches) { 
    return str_replace('.', '_', $matches[0]); 
    }, 
    $input 
); 

$ 출력

UPDATE `1_customers` SET `value` = '1.0' 
우리가 이야기하고 얼마나 많은 테이블