2016-06-08 120 views
-3

我試圖使用Magento的主題,當我導入主題數據,我得到的是說SQL查詢語法錯誤「」附近

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 '' at line 2, query was: 

SELECT `#__cms_page`.* 
FROM `#__cms_page` 
INNER JOIN `#__cms_page_store` AS `cms_page_store` 
    ON #__cms_page.page_id = cms_page_store.page_id 
WHERE (`#__cms_page`.`identifier`='home-demo-01') 
    AND (is_active = 1) 
    AND (cms_page_store.store_id IN (0, 1)) 
ORDER BY `cms_page_store`.`store_id` DESC 
LIMIT 1 

我不能似乎找到了問題,因爲它的SQL錯誤說語法錯誤幾乎沒有..

+0

始終指定您正在使用的RDBMS。這是MySQL嗎? – sstan

+0

「Magento主題」與我意識到的SQL無關。您是否使用某種生成查詢的CMS軟件? –

+0

你是對的,我編輯並添加了RDBMS。此外,我只是下載了一個magento的主題,並從主題中的sql文件上傳示例數據,這些是表的名稱,我不知道該主題是否使用CMS軟件。 –

回答

1

你還沒有逃過ON子句中的標識符引用。

這裏就是你缺少反引號:

ON #__cms_page .page_id = cms_page_store.page_id 
^  ^

如果我們打算逃跑的標識符,我們寧願做一貫。我的首選是爲表格分配一個簡短的別名。另外,對is_active的引用應該被限定......哪個表是該列的來源?

我的傾向是寫像這樣的查詢,只有逃避實際需要進行轉義標識符:

SELECT p.* 
    FROM `#__cms_page` p 
    JOIN `#__cms_page_store` s 
     ON s.page_id = p.page_id 
    WHERE (p.identifier = 'home-demo-01') 
    AND (p.is_active = 1) 
    AND (s.store_id IN (0, 1)) 
    ORDER BY s.store_id DESC 
    LIMIT 1 

如果我要逃不需要進行轉義標識符,我會隨機附上全部反引號。

+0

OMG哇謝謝!我不知道SQL中的backsticks和單引號有什麼區別,它可以與backsticks一起工作,而不是單引號 –

+0

非常感謝,如果是我的代碼(我將從現在開始)是一個主題下載的自動代碼.. –

+0

@ShayMualem:很多生成SQL的框架都會自動轉義每一個標識符。因爲這很容易做到。逃避標識符永遠無效。這要比找出標識符是否需要轉義以及爲每個標識符這樣做要簡單得多。只是逃避一切而已。 – spencer7593