2017-02-01 2 views
0

Ich versuche, eine Filterfunktion in PHP zu erstellen, die eine SQL auf den Filtern auf Basis ändert, die gesetzt wurden, zur Zeit habe ich dies:PDO MySQL BindParam in WHERE?

if(isset($_GET['filter1'])) 
{ 
    $arguements[] = "guide_type = 1"; 
} 
if(isset($_GET['filter2'])) 
{ 
    $arguements[] = "guide_type = 2"; 
} 
if(isset($_GET['filter3'])) 
{ 
    $arguements[] = "guide_type = 3"; 
} 
if(isset($_GET['filter4'])) 
{ 
    $arguements[] = "guide_type = 4"; 
} 
if(!empty($arguements)) 
{ 
    $filters = implode(' OR ',$arguements); 

    $get_all_guides = $DB_con->prepare('SELECT * FROM customer_stories 
           INNER JOIN customer_stories_guide_types 
           ON customer_stories.guide_type = customer_stories_guide_types.unique_id 
           WHERE :filters AND moderated = 1'); 

           $get_all_guides->bindParam(':filters', $filters, PDO::PARAM_STR); 

           echo $get_all_guides->debugDumpParams(); 

Das Auslesen ich von get_all_guides- $ erhalten> debugDumpParams() ; ist SQL: [227] SELECT * FROM customer_stories INNER JOIN customer_stories_guide_types ON customer_stories.guide_type = customer_stories_guide_types.unique_id WHERE :filters AND moderated = 1 Params: 1 Key: Name: [8] :filters paramno=-1 name=[8] ":filters" is_param=1 param_type=2 erhalten

ich keine Ergebnisse, wenn eine dieser Filter gesetzt sind, und ich weiß nicht, warum

+0

Ein beliebiges Stück SQL in einer Zeichenkette ist * nicht * ein Parameter, der gebunden werden kann - er muss ein bestimmter Wert sein, z 'WHERE table.field =: param' – CD001

+0

Sie können nur Werte binden, keine Logik. Ihre Anfrage wird zu 'WHERE 'guide_type = 1 OR guide_type = 2''. Erstellen Sie Ihre Abfrage ordnungsgemäß. – aynber

+0

Benennen Sie Ihr Feld als "Filter []" und verwenden Sie dann die Lösung aus der verknüpften Antwort. –

Antwort

-1

Dies funktioniert:

WHERE '.$filters.' AND moderated = 1 

statt

WHERE :filters AND moderated = 1 
+0

Es sollte von Klammern umgeben sein, weil es Mischen und/oder Logik ist. – aynber

+0

Wollen Sie sagen warum? – Aaranihlus

+0

Nun, auf einen zweiten Gedanken würde diese Lösung funktionieren und es ist sicher. Es ist jedoch nicht effizient. –