2011-12-15 50 views
0

SimpleTesting-PDOException:SQLSTATE [42S02]查看編輯修訂發佈者ichionid於2011年12月15日,在上午十點56分大家好,SimpleTesting-PDOException:SQLSTATE [42S02]

我在開發一個模塊的過程。我正在嘗試整合SimpleTest模塊,以便擁有一個包含我的代碼測試的獨立位置。

然而,當我嘗試運行對數據庫中的表,這是由我建立的查詢時,我得到: PDOException:SQLSTATE [42S02]:基表或視圖未找到:1146表「遊樂場。 simpletest311135TABLENAME

它試圖找到一個表simpletest311135TABLENAME,同時它應該查找TABLENAME。它總是添加最簡單的和一些隨機數。

當我針對drupal默認表(例如用戶和會話)運行查詢時,一切都很完美。任何解決方法?

Giannis


的實際功能

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); 
    } 
    } 

測試功能是:

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 2011-12-15 13:13:44

+0

請參閱上面的編輯版本! – 2011-12-15 14:30:15

回答

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)

希望可以幫到

相關問題