정규식 (preg_match 또는 preg_replace)을 사용하여 아래 문자열을 추출하는 방법 :
SELECT id FROM table WHERE 1
"id" 와 일치합니다.
SELECT name, (SELECT price FROM table2 WHERE id = '1') var FROM table1 WHERE 1
"name, (SELECT price FROM table2 WHERE id = '1') var" 과 일치합니다.
목표가 쿼리로 고급 작업을 수행하는 것이라면 가장 좋은 방법은 SQL 파서를 사용하는 것입니다 (예 : 제안 된대로 "php sql 파서"). SELECT와 FROM 사이의 콘텐츠 만 가져 오려면 다음을 사용할 수 있습니다.
$test_queries = array(
'SELECT id FROM table WHERE 1',
'SELECT name, (SELECT price, (SELECT 1+1) FROM table2) var FROM table1',
'SELeCT FROMAGE, \'\\\'((\', \'"\")(\', "\'\"\\\" FrOM table');
$pattern = <<<'LOD'
~
# definitions
(?(DEFINE)
# content inside quotes
(?<quoted> (["']) (?> [^"'\\]++ | \\{2} | \\. | (?!\g{-1})["'] )*+ \g{-1} )
# nested parenthesis
(?<nested> ( \( (?> [^()"']++ | \g<quoted> | (?-1) )*+ \) ) )
# content between SELECT and FROM
(?<content> (?> [^(F"']++ | \BF | F(?!ROM\b) | \g<quoted> | \g<nested> )++ )
)
# pattern
\bSELECT\b (?<result> \g<content> ) FROM\b
~xis
LOD;
foreach ($test_queries as $k => $test_query) {
if (preg_match($pattern, $test_query, $match))
echo '<br/>' . $k . ') ' . trim($match['result']);
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다