如何内爆';和';当存在单个和多个输入时,在SQL查询中动态执行


How to implode 'AND' in SQL query dynamically when there is single and multiple inputs

我从Android传递JSON输入,并在此基础上动态构建一个Query,然后在DB中运行它,将结果传递给Android。我可以构建查询,但无法在查询之间添加AND

$QueryString="SELECT * FROM `table` WHERE"; 
if ( (isset($val1) && !empty($val1)) ) { 
$QueryString1 .= " `it` IN ('$val1')"; 
} 
if ((isset($val2) && !empty($val2))) { 
$QueryString1 .= " `Re` IN ('$val2')"; 
} 
if ((isset($stringgen) && !empty($stringgen))) { 
$QueryString1 .= " $stringgen"; 
} 
if ((isset($val4) && !empty($val4))) { 
$QueryString1 .= " `Year` IN ('$val4')";  
} 
$stringgen1 = implode(' AND ', $QueryString1); //Aware that implode can be performed using Array

我试着像一样在字符串的末尾添加AND

$QueryString1 .= " `Re` IN ('$val2') AND" 

这是与输入的组合一起工作的。但当我只传递一个输入时,它就不起作用了。

我的完整SQL查询看起来像:

SELECT * FROM Movies WHERE `it` IN ($val1) AND `Re` IN ('$val2')  AND $stringgen AND `Year` IN ('$val4')

除了内爆"AND"之外,还有其他方法吗?

在使用内爆之前,需要在数组中添加SQL WHERE子句。

$QueryString = "SELECT * FROM `table`"; 
$QueryWhere = array();
if ( (isset($val1) && !empty($val1)) ) { 
    $QueryWhere[] = "`it` IN ('$val1')"; 
} 
if ((isset($val2) && !empty($val2))) { 
    $QueryWhere[] = "`Re` IN ('$val2')"; 
} 
if ((isset($stringgen) && !empty($stringgen))) { 
    $QueryWhere[] = "$stringgen"; 
} 
if ((isset($val4) && !empty($val4))) { 
    $QueryWhere[] = "`Year` IN ('$val4')";  
} 
$QueryString .= (!empty($QueryWhere) ? ' WHERE ' : '') . implode(' AND ', $QueryWhere);

无需使用isset和!一起清空

<?php
$QueryString = "SELECT * FROM `table` WHERE";
if (!empty($val1))
{
    $QueryString1 .= " `it` IN ('$val1')";
}
if (!empty($val2))
{
    $QueryString1 .= " && `Re` IN ('$val2')";
}
if (!empty($stringgen))
{
    $QueryString1 .= " &&  $stringgen";
}
if (!empty($val4))
{
    $QueryString1 .= " &&  `Year` IN ('$val4')";
}
// Remove && from starting and ending of string
$stringgen1 = trim($QueryString1, "&&");
?>