对任何试图这样做的人:
此代码响应多个HTML选择,如果用户按下没有过滤器的按钮,则会显示SELECT *。
Victor Koenders修复了这个问题,谢谢。
正如LPChip指出的那样,foreach需要两个不同的变量,一个调用函数,另一个调用表格中的表格列。
列上的简单cuotes不起作用,只有当我删除它时才有效,就像SELECT * FROM table WHERE variable ='criteria'一样。
我将LPChip标记为答案,因为该死的foreach让我振作起来。
我希望这可以帮到这里的人,这个网站很棒。
public function filterFood() {
$variable1 = $_POST['variable1'];
$variable2 = $_POST['variable2'];
$variable3 = $_POST['variable3'];
$criteria1 = $_POST['criteria1'];
$criteria2 = $_POST['criteria2'];
$criteria3 = $_POST['criteria3'];
$this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$query = "SELECT * FROM food";
$conditions = array();
if($criteria1 !="") {
$conditions[] = $variable1." = '".$criteria1."'";
}
if($criteria2 !="") {
$conditions[] = $variable2." = '".$criteria2."'";
}
if($criteria3 !="") {
$conditions[] = $variable3." = '".$criteria3."'";
}
$sql = $query;
if (count($conditions) > 0) {
$sql .= " WHERE " . implode(' AND ', $conditions);
}
//$result $this->db_connection->query($sql);
return $this->db_connection->query($sql);
var_dump($sql);
}
并且:
<?php
foreach($filter_food->filterFood() as $filtered_food) {
?>
现在我终于可以入睡了。
答案 0 :(得分:0)
$result = $this->db_connection->$sql;
这是你的问题,你想做类似
的事情$result = $this->db_connection->query($sql);
答案 1 :(得分:0)
foreach($filter_food->filterFood() as $filter_food)
这将永远不会有效,因为你正在使用数组$ filter_food,然后你正在使每个结果$ filter_food导致一个backloop,因此它不会工作。
您可以将$ filter_food更改为$ filtered_food或其他任何内容,以使其正常工作。
另外,我经常写这样的查询:我使用``引号的任何列或表,以及我使用&#34; ...&#34;的任何变量。这可以解决您的查询属性问题。特别是引用表格,因为它可能会将其中一个表视为一个函数。
您的查询将变为:
SELECT * FROM `food` WHERE `container_food` = "SACO" AND `animal_name_food` = "GATO"