我正在尝试查询我的数据库,但由于某种原因,查询仅在我输入硬编码的参数时才起作用。如果我使用变量,查询拒绝工作......
这是我对硬编码参数的查询,效果很好:
$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()
中
答案 0 :(得分:3)
您在此处输入错误:field_data_field_job_tags as tagswhere (type=
- tags
和where
之间应该有一个空格,因此您的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返回失败的位置。
然后在每一行的末尾添加一个空格,看看查询是否正常...
我会帮助你,tags
和where
之间以及\'Enterprise Asset Management\')
和order by
之间应该有空格 - 但事实并非如此。唯一的空格位于n.nid
和and tags.field_job_tags_value
之间,因为标签空间...