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
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
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
Benennen Sie Ihr Feld als "Filter []" und verwenden Sie dann die Lösung aus der verknüpften Antwort. –