Mysql查询结果来自多个条件

时间:2014-04-19 08:35:27

标签: php mysql

对任何试图这样做的人:

此代码响应多个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) {
?>

现在我终于可以入睡了。

2 个答案:

答案 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"