繁体   English   中英

从多个PHP GET参数构造SQL SELECT查询

[英]Construct SQL SELECT query out of multiple PHP GET parameters

我正在使用答案https://stackoverflow.com/a/5203351/1711950中提供的代码来处理SQL WHERE子句的不同组合:

$vars = array(
    (!empty($_GET["var1"]))? " keyword = '". $_GET["var1"] ."' ": null, 
    (!empty($_GET["var2"]))? " author  = '". $_GET["var2"] ."' ": null,
    (!empty($_GET["var3"]))? " date    = '". $_GET["var3"] ."' ": null,
    (!empty($_GET["var4"]))? " forums  = '". $_GET["var4"] ."' ": null
);


function myfilterarray($var)
{
    return !empty($var)?$var: null;
}

$newvars = array_filter($vars, 'myfilterarray');

$where = join(" OR ", $newvars);

$sql = "SELECT DISTINCT title, description FROM table ".(($where)?"WHERE ".$where: null);

echo $sql;

当每个GET参数是单个值时,代码将起作用,如下所示:

http://example.com/getData.php?keyword=a1

我希望能够处理这种情况:

http://example.com/getData.php?keyword=a1,b1,c1,a2,b2,c2

为此,我已经修改了如下代码:

(!empty($_GET["var1"]))? " keyword IN ('". $_GET["var1"] ."') ": null

当然,这会使SQL查询看起来像这样,由于引用而无法使用。

SELECT * FROM table WHERE keyword IN ('SE162321000156-3PQZ,SE2321000164-7381037592311')

我如何解决这个问题?

谢谢!

您必须拆分这些值,在它们两边加上引号,然后将字符串重新连接在一起。 这是一个非常基本的示例:

$foo = (!empty($_GET["keyword"]))? $_GET["keyword"] : null;
$foo = explode(",", $foo);
$fooArray = [];
foreach( $foo as $fooElement ) {
    $fooArray[] = "'$fooElement'";
}
$foo = implode(",", $fooArray);

echo $foo; // output: 'a1','b1','c1','a2','b2','c2'
$arr = explode(",",trim($_GET["var1"]));
$var = "";
for($i=0;$i<sizeof($arr);$i++)
{
    if($i == (sizeof($arr)-1))
    {
        $var .= "'".$arr[$i]."'";
    }
    else
    {
        $var .= "'".$arr[$i]."',";
    }
}

现在您可以在查询中使用$var ,即IN($ var)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM