2017-05-18 138 views
0

我有以下問題 - 我正在編碼一個電子商務網站,有促進一段時間。當時間推移促銷更改其相應的數據庫active值爲0.當我檢查促銷時,第一個條件是active=1,但在某些情況下,MySQL忽略它。MySQL sql忽略在哪裏條件

這是我最近的問題的一個例子:

$productPromotion = $db->getResults('*', TABLE_PROMO, "active = '1' 
AND (discount_subject = 'all_orders' 
OR discount_subject_product = ".$values['product']['id'].") 
OR (discount_subject = 'category' 
AND discount_subject_category = ".$categoryId[0] . ") ORDER BY id ASC"); 

$db->getResult是一個自定義函數,它接受3個參數 - 什麼,表和地點。

問題是,它正在返回已過期並且活動= 0的促銷活動。我的sql的問題在哪裏?

+2

MySQL不能看到你的PHP代碼。什麼是您正在生成的實際SQL查詢? –

回答

1

你必須加上括號角落找尋or

$productPromotion = $db->getResults('*', TABLE_PROMO, "active = '1' 
     AND 
    ((discount_subject = 'all_orders' OR discount_subject_product = ".$values['product']['id'].") 
     OR (discount_subject = 'category' AND discount_subject_category  = ".$categoryId[0] . ")) ORDER BY id ASC"); 

還可以瞭解準備語句以防止SQL注入