【问题标题】:SimpleTesting-PDOException: SQLSTATE[42S02]SimpleTesting-PDOException: SQLSTATE[42S02]
【发布时间】:2011-12-15 11:44:56
【问题描述】:

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

我正在开发一个模块。我正在尝试合并 SimpleTest 模块,以便有一个单独的地方包含我的代码测试。

但是,当我尝试对由我构建的数据库中的表运行查询时,我得到: PDOException: SQLSTATE[42S02]: 未找到基表或视图:1146 表'playground.simpletest311135TABLENAME

它会尝试查找表 simpletest311135TABLENAME,而它应该查找 TABLENAME。它总是添加 simpletest 和一些随机数。

当我对 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);
    }
  }

测试函数是:

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 的 simpletesting 模块一起工作。

【问题讨论】:

  • 您能否发布导致此错误的具体代码行?
  • 请看上面的编辑版本!

标签: drupal-7 simpletest


【解决方案1】:

抱歉,如果我误解了,但我认为您正在尝试使用简单的内部联接运行查询?如果是这样你的语法是错误的,它应该是这样的:

$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-&gt;innerJoin() 返回,它不返回别名的字符串表示形式,而是返回一个对象。您在查询中获得的表名可能是该对象的字符串表示形式 (simpletest311135)。

当您使用 innerJoin() 的第二个参数时,它将成为连接表在查询的其余部分中已知的别名。所以你可以像上面的例子一样使用-&gt;condition('d.jid', $jobId)

希望有帮助

【讨论】:

  • 感谢您的提示;)我找不到像我一样使用别名的参考,但我也会在有能力的时候提供它!不幸的是,我仍然得到相同的回应。如果我找到答案或者您有任何建议,我会尽快回复您!
猜你喜欢
  • 1970-01-01
  • 2023-02-02
  • 2014-02-09
  • 2017-06-12
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
相关资源
最近更新 更多