MySQL查询无法处理变量

时间:2012-05-04 10:16:26

标签: php mysql drupal-7

我正在尝试查询我的数据库,但由于某种原因,查询仅在我输入硬编码的参数时才起作用。如果我使用变量,查询拒绝工作......

这是我对硬编码参数的查询,效果很好:

$q_jobs = 'select distinct nid from node n, field_data_field_job_tags as tags
          where (type= \'job\' and n.language = \'nl\' and tags.entity_id = n.nid 
               and tags.field_job_tags_value = \'Enterprise Asset Management\') 
          order by n.changed desc limit 7';

但是当我使用变量时,查询拒绝工作......

 $q_jobs = 'select distinct nid from node n, field_data_field_job_tags as tags
              where (type= \'job\' and n.language = :lang and tags.entity_id = n.nid 
                   and tags.field_job_tags_value = :title) 
              order by n.changed desc limit 7';
 $results_jobs = db_query($q_jobs, array(':lang' => $language->language, 
                                         ':title' => $node->title));

虽然这是一个Drupal查询,但我认为这只是我语法中的某个错误?

我收到此错误:

  

PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064您有错误   在你的SQL语法中;查看与您的MySQL服务器版本对应的手册   在'(type ='job'和n.language ='nl'和tags.entity_id =附近使用正确的语法   n.nid和tags.field_job'在第1行:从{node} n中选择不同的nid,   field_data_field_job_tags as tagswhere(type ='job'和n.language =:lang and   tags.entity_id = n.nid和tags.field_job_tags_value =:title)排序依据   n.changed desc limit 7;数组([:lang] => nl [:title] =>企业版   资产管理)在rd_get_related_news_and_blogs()

1 个答案:

答案 0 :(得分:3)

您在此处输入错误:field_data_field_job_tags as tagswhere (type= - tagswhere之间应该有一个空格,因此您的SQL的引用部分应为field_data_field_job_tags as tags where (type=

始终阅读所有mysql错误消息 - 始终引用它失败的查询,因此您可以在查询中轻松找到任何拼写错误或其他错误。

编辑:cos你不相信我,这里是从mysql错误信息重复查询:

select distinct nid from {node} n, field_data_field_job_tags as tagswhere (type= 'job' and n.language = :lang and tags.entity_id = n.nid and tags.field_job_tags_value = :title)order by n.changed desc limit 7;

现在看看你的查询中有newline的位置,应该在(而不是)查询MySQL返回失败的位置。 然后在每一行的末尾添加一个空格,看看查询是否正常...

我会帮助你,tagswhere之间以及\'Enterprise Asset Management\')order by之间应该有空格 - 但事实并非如此。唯一的空格位于n.nidand tags.field_job_tags_value之间,因为标签空间...