我的问题在于绑定参数。当我不使用任何过滤器(并且不需要绑定任何东西)时,我的代码工作正常,但是当我在查询中使用参数时不会得到任何东西。
我做了这样的事情:
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)
答案 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);
}
}