2017-05-01 15 views
0

:PHP에서 순차적 인 두 개의 heredoc? 다음 코드로 잘못 무엇

static function queryVariables($variable_name) 
    { 

     $query = <<<SQL 
SELECT * 
    FROM variables v 
    WHERE v.nam = '$variable_name' 
SQL;  

    $ans = self::$conn->select($query); 


     $query = <<<SQL 
SELECT v.id, v.nam variable_nam, v.descr variable_descr, us.id subset_id, us.unit_id, us.ord, us.nam subset_nam, us.color, us.min_value, us.max_value 
    FROM variables v 
    LEFT JOIN unit_subsets us ON v.unit_id = us.unit_id 
    WHERE v.nam = '$variable_name' 
SQL; 

     $ans = self::$conn->select($query); 

     return $ans; 
    } 

나는 $query 변수를 덮어 쓰기 때문에 그것이 논리적으로 잘못 알고있다. 그러나 문제는 여기에 두 개의 heredoc가 있다는 것을 이해하지 못하는 이유는 무엇입니까? 그것은 하나 히어 닥 같이 전체 블록을 취급하고 히어 닥에 $ans를 삽입하려고하기 때문에

Undefined variable: ans 

예외를 던진다.

수정 방법은 무엇입니까?

+0

두 개의 heredocs를 하나씩 퍼팅하면 테스트 파일에서 나에게 잘 작동합니다. –

답변

2

SQL; 폐쇄 식별자 뒤에 공백이 있습니다. 당신은 그들을 가질 수 없습니다. 세미콜론은 개행 전에 마지막 문자 여야합니다. documentation 당으로

SQL;  
    ^^^^^^^ 

:

닫기 식별자를 갖는 줄은 세미콜론을 제외하고 다른 문자를 포함해야합니다 점에 유의하는 것이 매우 중요합니다

(;). 이는 특히 식별자가 들여 쓰기가되지 않을 수 있으며 세미콜론 전후에 공백이나 탭이 없어야 함을 의미합니다. 또한 닫기 식별자 앞에있는 첫 번째 문자는 로컬 운영 체제에서 정의한 개행 문자 여야합니다. Mac OS X를 포함하여 UNIX 시스템에서는 \ n입니다. 닫는 구분 기호 뒤에는 개행 문자가 와야합니다.

이 규칙이 잘못되어 닫는 식별자가 "깨끗한"것이 아니라면 닫는 식별자로 간주되지 않으므로 PHP는 계속 찾고 있습니다. 현재 파일의 끝 부분 앞에 적절한 닫기 식별자가 없으면 마지막 줄에 구문 분석 오류가 발생합니다.

2

그것은 분명히 documentation에 설명되어 있습니다 :

닫기 식별자를 갖는 줄은 세미콜론을 제외하고 다른 문자를 포함해야합니다 점에 유의하는 것이 매우 중요합니다(). 이는 특히 식별자가 들여 쓰기가되지 않을 수 있으며 세미콜론 전후에 공백이나 탭이 없어야 함을 의미합니다.

게시 된 코드의 첫 번째 모양은 같은 줄에 공백으로 나옵니다. 그들을 제거하고 당신이 의도 한대로 작동합니다.