我正在尝试通过存储在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(以及一般的编程)的了解非常基础。谢谢!
答案 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;
?>