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的简单测试模块。
答案 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)
。
希望有所帮助