大写FROM导致错误1064

时间:2012-07-03 14:46:46

标签: php mysql mysql-error-1064

我有一个已编写的sql查询,但from命令是小写的。我喜欢它的格式是大写但如果我改变它我得到错误1064.

select,where等等都是小写的,但是当我改为高位时它们工作正常,只有WHERE语句才会导致这种情况。

这是sql:

 $listing_sql = "SELECT " . $select_column_list . 
                        "p.products_id, p.products_model, p.manufacturers_id, p.products_price, " .
                        "p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as " .
                        "specials_new_products_price, IF(s.status, s.specials_new_products_price, " .
                        "p.products_price) as final_price ". 
                        "FROM " . 
                        TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS . " p left join " . 
                        TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id left join " . 
                        TABLE_SPECIALS . " s on p.products_id = s.products_id, " . 
                        TABLE_PRODUCTS_TO_CATEGORIES . " p2c WHERE p.products_status = '1' AND " .
                        "p.products_id = p2c.products_id and pd.products_id = p2c.products_id and " .
                        "pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . 
                        (int)$current_category_id . "'";

这是回声时sql的样子:

SELECT p.products_image,
       pd.products_name,
       p.products_id,
       p.products_model,
       p.manufacturers_id,
       p.products_price,
       p.products_tax_class_id,
       IF(s.status, s.specials_new_products_price, NULL)             AS
       specials_new_products_price,
       IF(s.status, s.specials_new_products_price, p.products_price) AS
       final_price
FROM   products_description pd,
       products p
       LEFT JOIN manufacturers m
              ON p.manufacturers_id = m.manufacturers_id
       LEFT JOIN specials s
              ON p.products_id = s.products_id,
       products_to_categories p2c
WHERE  p.products_status = '1'
       AND p.products_id = p2c.products_id
       AND pd.products_id = p2c.products_id
       AND pd.language_id = '1'
       AND p2c.categories_id = '36' 

2 个答案:

答案 0 :(得分:1)

(受过教育的)猜测是你在谈论OsCommerce安装。

如果情况并非如此,那么您可能正在使用曾经分离过的东西(或其前身, tep )。

您遇到的问题可能是因为splitPageResults类中的构造函数使用区分大小写的strpos而不是stripos,它不区分大小写。

所以...它的长短是,

如果这确实是oscommerce:

编辑split_page_results.php文件
(1:/catalog/classes/split_page_results.php,2:/catalog/admin/classes/split_page_results.php)

并在构造函数中用stripos替换strpos。

即。变化

$pos_from = strpos($this->sql_query, ' from', 0);

为...

$pos_from = stripos($this->sql_query, ' from', 0);

如果这不是osCommerce,只需寻找类似的东西。

strpoststripos

的php doc

答案 1 :(得分:0)

尝试加入产品:

SELECT p.products_image,
   pd.products_name,
   p.products_id,
   p.products_model,
   p.manufacturers_id,
   p.products_price,
   p.products_tax_class_id,
   IF(s.status, s.specials_new_products_price, NULL) AS specials_new_products_price,
   IF(s.status, s.specials_new_products_price, p.products_price) AS final_price
FROM   products_description pd
   LEFT JOIN manufacturers m
          ON p.manufacturers_id = m.manufacturers_id
   LEFT JOIN specials s
          ON p.products_id = s.products_id,
            products_to_categories p2c
   LEFT JOIN products p ON ( p.products_id = p2c.products_id )
WHERE  p.products_status = '1'
   AND p.products_id = p2c.products_id
   AND pd.products_id = p2c.products_id
   AND pd.language_id = '1'
   AND p2c.categories_id = '36'