2011-12-15 3 views
0

SimpleTesting-PDOException : SQLSTATE [42S02]보기 편집 개정 내가 모듈을 개발하는 과정에서 오전SimpleTesting-PDOException : SQLSTATE [42S02]

, 안녕 모두 오전 10시 56분 12 월 (15) 2011 ichionid에 의해 게시 됨 . 내 코드 테스트가 포함 된 별도의 장소를 갖기 위해 SimpleTest 모듈을 통합하려고합니다. 나는 날에 의해 구축되는 데이터베이스의 테이블에 대해 쿼리를 실행하려고하면

그러나, 내가 얻을 : PDOException : SQLSTATE [42S02] : 기본 테이블이나가 발견되지 전망 : 1146 표 '놀이터. simpletest311135TABLENAME

TABLENAME을 찾아야하는 동안 simpletest311135TABLENAME 테이블을 찾습니다. 항상 단순하고 임의의 숫자를 추가합니다.

사용자 및 세션과 같은 drupal 기본 테이블에 대해 쿼리를 실행하면 모든 것이 완벽하게 작동합니다. 해결 방법은 없습니까? 테스트 기능은

function dlm_job_finished($jobId,$urls,$messageFromFS){ 
    $query = db_select('users','u'); 
    $query -> fields('u',array('uid')); 
    $d_alias = $query->innerJoin('dlm_user_auth_entities','d','%alias.uid = u.uid'); 
    $query -> condition("{$d_alias}.jid",$jobId); 
    $result = $query->execute(); 
    $message = variable_get('dlm_settings_email_message').'<br />'; 
    foreach ($result as $record) { 
     foreach ($urls as $file_url_to_download){ 
     $message.= '<a href="'.$file_url_to_download.'">'.$file_url_to_download.'</a> <br /> '; 
     } 
     $message.=$messageFromFS.'<br />';  
     dlm_mail_notifier($record->uid,$message); 
    } 
    } 

입니다

Giannis이


실제 기능은 다음과 같습니다

테스트 클래스 내부
class DlmTestCase extends DrupalWebTestCase{ 

    public function setUp(){ 
    parent::setUp('dlm'); 
    } 

    public function testDlmJobFinished(){ 
     $info = module_invoke(
        'dlm', 
        'job_finished', 
        'awsedrfvcxzsdfrtawsedrfvcxzsdfrt', 
        array(
        'http://media.holkeydonkey.com/download/frehvf64fdsffdf.zip', 
        'http://media.marioBos.com/download/12.zip', 
       ), 
        "additional message!" 
       ); 
     } 
} 

내가 작품을 만든 유일한 기능은 사람입니다 기본 drupal 데이터베이스 테이블을 쿼리하십시오. 또한, 위의 함수가 작동하고, 나는 다른 방법으로 호출하고 작동했습니다. 문제는 Drupal의 간단한 테스트 모듈로 작업 할 수 없다는 것입니다.

+0

이 오류의 원인이되는 특정 코드 줄을 게시 할 수 있습니까? – Clive

+0

위의 수정 된 버전을 참조하십시오! –

답변

0

오해가 있었다면 죄송하지만 간단한 내부 결합으로 쿼리를 실행하려고한다고 생각하십니까? 그래서 당신의 구문이 잘못되면, 그것은 다음과 같아야합니다

$query = db_select('users','u') 
    ->fields('u',array('uid')) 
    ->condition('d.jid', $jobId); 

$query->innerJoin('dlm_user_auth_entities', 'd', 'd.uid = u.uid'); 

$results = $query->execute(); 

을 문제는 당신의 조건입니다 :

`$query -> condition("{$d_alias}.jid",$jobId);` 

당신은 당신의 별명 이름으로 사용하는 $d_alias (할당 된 변수 위 조건)이 별칭의 문자열 표현을 반환하지 않는 $query->innerJoin()에서 반환되면 개체를 반환합니다. 쿼리에 포함 된 테이블 이름은 해당 개체의 문자열 표현 (simpletest311135) 일 수 있습니다.

innerJoin()의 두 번째 인수를 사용하면 나머지 쿼리에서 조인 된 테이블을 알 수있는 별칭이됩니다. 위의 예 에서처럼 ->condition('d.jid', $jobId)을 사용할 수 있습니다.

도움이 되길 바랍니다

+0

힌트를 보내 주셔서 감사합니다;) 내가했던 것처럼 별칭을 사용하기위한 참조를 찾을 수 없지만 가능할 때도 제공 할 것입니다! 불행히도 나는 여전히 같은 반응을 얻는다. 나는 대답을 찾거나 더 많은 제안이 있다면 환영받을 것입니다. –