【问题标题】:Constructing mysql select from $_POST array从 $_POST 数组构造 mysql 选择
【发布时间】:2016-12-23 17:44:46
【问题描述】:

这是我表单中的 $_POST 数组。

Array ( [prescribedid] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 9 [4] => 13 )

我想为数组中的任何项目创建一个选择。我写了这个,它产生了正确的 SELECT,但是 if() 消除尾随 OR 使它笨拙。

$query = "SELECT * ";
$query .= "FROM prescribed WHERE ";

for($i=0; $i<count($_POST["prescribedid"]); $i++) {
    $query .= "prescribedid={$_POST['prescribedid'][$i]} ";
        if($i < (count($_POST["prescribedid"])-1)) {
        $query .= "OR ";
        }
}

它产生这个:

SELECT * FROM prescribed WHERE prescribedid=1 OR prescribedid=2 OR prescribedid=3 OR prescribedid=9 OR prescribedid=13

是否有另一种方法对 SELECTS 进行分组或编写 FOR() 以使其更清晰,即没有最后一个 IF()。

【问题讨论】:

  • Tip: 您可以使用IN 以避免多个OR 子句。 ...WHERE prescribedid IN (1,2,3,9,13)....
  • Tip:你需要使用PDO或者vaidate输入。此代码可用于 SQL 注入。

标签: php html mysql


【解决方案1】:

使用 MySQL IN 子句

$ids = implode(",",$_POST["prescribedid"]);
$query = "SELECT * FROM prescribed WHERE  prescribedid IN ($ids)";

【讨论】:

    【解决方案2】:
    $values=implode(",",$_POST["prescribedid"]);
    $query = "SELECT * FROM prescribed WHERE  prescribedid IN ($values)";
    

    Sanitization 在你身边 :)

    【讨论】:

      【解决方案3】:

      您好,您可以使用In condition。使用imploade 函数查找逗号分隔值

      $data = array('prescribedid'=>array(1,2,3,9,14));
      $query = 'SELECT * FROM prescribed WHERE  prescribedid IN (';
      $query .= implode(',',$data['prescribedid']).')';
      echo $query ;
      

      输出

      SELECT * FROM prescribed WHERE prescribedid IN (1,2,3,9,14)
      

      【讨论】:

      • 您不需要字符串连接(它可能会引起一些混乱,尤其是在这种布局中。)
      【解决方案4】:

      您可以在这里简单地使用 IN 子句。

      参考MySQL IN clause

      $query = "SELECT * FROM prescribed WHERE  prescribedid IN ".implode(',', $_POST["prescribedid"]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 2019-06-20
        • 1970-01-01
        相关资源
        最近更新 更多