2017-05-18 6 views
0

Ich habe das folgende Problem - Ich bin eine E-Commerce-Website, die Promotionen für einen bestimmten Zeitraum hat. Wenn Zeit vergeht, ändert sich die entsprechende Datenbank active Wert auf 0. Wenn ich nach Promotions suche, ist die erste Bedingung, dass active=1, aber in einigen Fällen ignoriert MySQL es. HierMySQL SQL ignorieren WHERE Zustand

ist ein Beispiel für mein letztes Problem:

$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 ist eine benutzerdefinierte Funktion, die 3 Parameter nimmt - Was, Tafel- und Wo.

Das Problem ist, dass es Promotions zurückgibt, die bereits abgelaufen sind und aktiv = 0 haben. Wo ist das Problem mit meinem SQL?

+2

MySQL zu verhindern, kann nicht Ihre PHP-Code sehen. Was ist die eigentliche SQL-Abfrage, die Sie generieren? –

Antwort

1

Sie haben Klammern hinzuzufügen arround 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"); 

auch über vorbereitete Anweisungen lernen SQL-Injektion