''附近的SQL查询语法错误

时间:2016-06-08 15:24:40

标签: mysql sql

我尝试使用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

我似乎无法找到问题,因为它说语法错误几乎没有。

1 个答案:

答案 0 :(得分: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

如果我要逃避不需要转义的标识符,我会将所有包含在反引号中,无处不在。