【问题标题】:PHP select with filters from URL as parameters in queryPHP 从 URL 中选择过滤器作为查询中的参数
【发布时间】:2018-01-26 21:11:57
【问题描述】:

我的问题是绑定参数。当我不使用任何过滤器(并且不需要绑定任何东西)时,我的代码工作正常,但是当我在查询中使用参数时不会得到任何东西。

我做了这样的事情:

    if(count($nameFilters) > 0){
      $nameParameters = "Name IN (";
      for($i=0; $i<count($nameFilters); $i++){
        $nameParameters .= "name" . $i;
        if($i < count($nameFilters)-1)
          $nameParameters .= ",";
      }
    $nameParameters .= ") ";
    }

$query = "SELECT id, Name, Size, Color FROM " . $this->table_name . " " . $where . " ";

if(count($nameFilters) > 0)
    $query.= $nameParameters;

    $stmt = $this->connection->prepare($query);

if(count($nameFilters) > 0){
    for($i = 0;$i<count($nameFilters);$i++){
    $tmp_string = $nameFilters[$i];
    $tmp_string=htmlspecialchars(strip_tags($tmp_string));
    $tmp_string = "%{$tmp_string}%";
    $stmt->bindParam("name" . $i, $tmp_string);
}
}

我的 $query 值是:

SELECT id, Name, Size, Color FROM shoes 
WHERE Name IN (name0) 

【问题讨论】:

标签: php mysql arrays filter parameters


【解决方案1】:

如果您将 URL 参数更改为 url?name[]=asd1&amp;name[]=asd2&amp;color[]=red&amp;color[]=blue,PHP 会自动将 $_GET['name'] 视为一个数组。

【讨论】:

    【解决方案2】:

    PHP 中有一个函数可以为您解决这个问题,它称为http_build_query。看看它以及它是如何工作的。

    【讨论】:

      【解决方案3】:

      好的,所以我通过搜索谷歌几个小时想出了答案。

      制作参数字符串进行查询:

      $nameParameters .= ":name" . $i;// i was missing ":" -_-
      

      绑定应该是:

      if(count($nameFilters) > 0){
          for($i = 0;$i<count($nameFilters);$i++){
              $tmp_string = $nameFilters[$i];
              $stmt->bindValue("name" . $i, $tmp_string);
          }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-03
        • 1970-01-01
        • 1970-01-01
        • 2015-08-19
        • 2014-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多