SimpleTesting-PDOException:SQLSTATE [42S02]

时间:2011-12-15 11:44:57

标签: drupal-7 simpletest

SimpleTesting-PDOException:SQLSTATE [42S02]查看编辑修订由ichionid于2011年12月15日上午10:56发布大家好,

我正在开发模块的过程中。我正在尝试合并SimpleTest模块,以便有一个包含我的代码测试的单独位置。

但是,当我尝试对数据库中的表运行查询时,我得到了: PDOException:SQLSTATE [42S02]:找不到基表或视图:1146表'playground.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的简单测试模块。

1 个答案:

答案 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)

希望有所帮助