来自$ _POST的SQL SELECT语句

时间:2016-09-02 20:47:08

标签: php html mysql

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

我有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(以及一般的编程)的了解非常基础。谢谢!

1 个答案:

答案 0 :(得分:-1)

忽略我上面的评论,这应该有用(虽然完全不安全):

<?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;
?>
相关问题