2012-07-03 43 views
-1

我有一個查詢,我想工作,所以我格式化它在一個更簡單的方式來閱讀。但是,當我刷新我的頁面時,我收到錯誤1064.我所做的唯一的事情就是添加換行符。即使我只添加1個換行符,我也會得到這個錯誤。SQL錯誤1064添加換行符時

這裏是原始查詢:

$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 . "'"; 

,並簡單地增加1或2個換行符之前,像這樣:

$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 . "'"; 

導致錯誤拿出我使用WAMP服務器與MySQL版本5.5.16和PHP版本5.2.2 appache 2.0.63

+1

這不是一個答案,但爲什麼你用引號(int)表達式?查看執行查詢的代碼也可能有所幫助。 – raina77ow

+0

這不是我的查詢,但我相信這是因爲它是一個被調用到查詢中的php變量 – Sackling

+0

請參閱實際上查詢使用'WHERE x ='3''而不是'WHERE x = 3'形式;但後者是相當好的(如果x是int域,我想它是)。但無論如何:你是否嘗試在'from'之前插入一個空格?即,用'^ from'替換'^ from'。 – raina77ow

回答

2

這是因爲你在字面上加入\n或查詢中有很大差距。

如果您停止在as final_price處的引號,然後添加換行符,然後繼續字符串. 'from ' . TABLE...,則應該會發現不會發生該錯誤。

在查詢後直接鍵入此代碼,您應該看到您的錯誤。

echo $listing_sql; 
exit(); 
+0

+1用於提供回聲以幫助調試。 –

2

你把換行符放在字符串的中間,而mysql服務器不會這樣做。一個理智的方式來打破你的查詢成多行將是:

$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 . "'";