2012-05-04 143 views
0

我想查詢到我的數據庫,但由於某些原因,當我進入硬編碼的參數查詢唯一的工作。如果我使用的變量,查詢拒絕工作......MySQL查詢無法處理變量

這是我的查詢與硬編碼參數和工作得很好:

$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]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(type= 'job' and n.language = 'nl' and tags.entity_id = n.nid and tags.field_job' at line 1: 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; Array ([:lang] => nl [:title] => Enterprise Asset Management) in rd_get_related_news_and_blogs()

+0

你得到任何類型的錯誤? –

+0

是的,我將它添加到我的問題 – Michiel

+0

類型屬於哪個表?所有其他字段名稱都以tablename.filed名稱的形式給出,在caluse – ray

回答

3

在這裏你有一個錯字:field_data_field_job_tags as tagswhere (type= - 應該有tagswhere之間的空間,這樣你的SQL的引用部分應field_data_field_job_tags as tags where (type=

務必閱讀所有的MySQL錯誤信息 - 這與一直沒有報價查詢這樣你可以很容易地找到您所查詢的任何錯字或其他錯誤。

編輯:因爲你不相信我,這裏是從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因爲標籤空間之間...

+0

中有一個換行符將兩者隔開。它也被認爲是一個空間。 –

+1

@Truth如果它被認爲是一個空格,爲什麼然後mysql錯誤消息中的查詢會說'field_data_field_job_tags as tagswhere(type ='??? – shadyyx

+0

因爲這是如何在HTML中查看錯誤時的格式如果錯誤是被視爲來源,你會看到換行符。 –