繁体   English   中英

$ _POST中的SQL SELECT语句

[英]SQL SELECT statement from $_POST

我正在尝试通过存储在$_POST数组中的html表单收集的信息来构建SQL SELECT语句。 我的困难之所以出现,是因为该声明必须根据用户的输入而有所不同。

我有2个下拉菜单,其值分别存储在$_POST['flow']$_POST['tables'] 到现在为止还挺好。

然后,我有4个用于国家/地区的复选框,以及15个/年的复选框。 第一个存储在数组$_POST['country'] ,第二个存储在$_POST['year']

我试图通过如下的foreach循环构建SQL语句:

<?php 
//Define SQL SELECT statement
    $sql = "SELECT * FROM ".$_POST['tables']." WHERE FlowType = '".$_POST['flow']."' AND (";

    foreach ($_POST['country'] as $value) {
        $sql .= "Reporter = '$value' OR ";
    }

    $sql = substr($sql, 0, -3);
    $sql .= ") AND (";

    foreach ($_POST['year'] as $value) {
        $sql .= "TradeYear = '$value' OR ";
    }

    $sql = substr($sql, 0, -4);
    $sql .= ")";

    echo $sql;
?>

它有效,但是我感觉可以以不同的方式实现。 而且,使用这种方法将准备好的语句应用于PDO查询将很复杂。

有什么建议么? 我希望对此有所投入,因为我对PHP(以及一般编程)的知识非常基础。 谢谢!

从上面忽略我的评论,这应该有效(尽管完全不安全):

<?php 
//Define SQL SELECT statement
$sql = "SELECT * FROM ".$_POST['tables']." WHERE FlowType = '".$_POST['flow'];

if(isset($_POST['country']) && is_array($_POST['country']) && count($_POST['country']) > 0)
{
    $sql.= " AND Reporter in ('".implode("','", $_POST['country'])."')";
}

if(isset($_POST['year']) && is_array($_POST['year']) && count($_POST['year']) > 0)
{
    $sql.= " AND TradeYear in ('".implode("','", $_POST['year'])."')";
}

echo $sql;
?>

暂无
暂无

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

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