2017-09-25 3 views
-1

"preg_replace"기능을 알고 있지만 그 내부에서 쿼리를 사용하는 방법은 알지 못합니다. 예를 들어 나는 <em>__을 변환 할 수있어 : 좀 더 강력한 뭔가를 찾고 있어요데이터베이스에 대한 쿼리가있는 Preg_replace

$text = preg_replace('/__(.+?)__/s', '<em>$1</em>', $text);

. 일부 서식있는 텍스트 (예 : [TTT]112233[/TTT])를 검색어의 결과 인 다른 텍스트 (예 : echo "$text2";)로 대체하고 싶습니다.

변수 $ text2는 "SELECT * FROM table WHERE id=112233"과 같은 쿼리의 결과입니다.

이렇게하는 임베디드 PHP 함수가 있습니까? 많은 감사합니다, Fabio

+0

질문의 문구는 100 % 명확하지 않지만 쿼리를 실행하고 결과를 변수로 가져와 행을 반복하며 (여러 개가있는 경우) 결과가 포함 된 열을 가져온 다음 replace 함수를 통해 각 열을 실행하십시오. – ADyson

+0

이것을 상상해보십시오. 나는 내용을 쓰고 그 내용 안에 견적을 표시하고 싶다. 그 견적은 데이터베이스에 등록되어 ID = 112233입니다. 그래서 내 콘텐츠에 다음과 같이 쓰고 싶습니다. "감사의 말을 전하고 싶다"고 덧붙였다. dolore 마그나 aliqua. * [TTT] 112233 [/ TTT] * UT enim 광고 미님 veniam, 결과는 그 안에 전체 따옴표로 텍스트해야한다. 내가 인용의 ID 이전을 모르는 내용 - 텍스트 읽기. –

답변

0

여기에이 방법이 있습니다. 아마도 가장 효율적인 것은 아니지만 방법 일 것입니다. 그것은 preg_replace_callback

$line = preg_replace_callback(
     '|[TTT](\d+)[/TTT]|', 
     function ($matches) use ($dbConnection) { 
      $q = "SELECT textColumn FROM table WHERE id=? LIMIT 1"; 
      $stmt = mysqli_prepare($dbConnection,$q); 
      mysqli_bind_param("i",$matches[1]); 
      mysqli_execute($stmt); 
      mysqli_bind_result($result);    
      mysqli_fetch($stmt); 
      return "[TTT]$result[/TTT]"; 
     }, 
     $line 
    ); 

주에 본사를 둔이 mysqli 가정하지만 방법이 다를 수 있습니다.