PHP选择URL中的过滤器作为查询中的参数

时间:2018-01-26 21:11:58

标签: php mysql arrays filter parameters

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

我做了这样的事情:

    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);
}
}

我的$查询值是:

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

好的,所以我通过搜索谷歌几个小时来找到答案。

使参数字符串查询:

$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);
    }
    }