2015-11-02 54 views
1

我想搜索我的数据库,我最初只用一个条件工作,但现在有四个,它只会刷新页面,删除字段输入。MySQL多个条件

我试过只使用逗号,但这似乎也不起作用。我一直无法在Google上找到有关他们是极限的任何信息,但也没有使用四种条件的示例。有没有正确或更好的方法可以尝试?

if(isset($_POST['search'])){ 
    $lname = trim($_POST['lname']); 
    $address = trim($_POST['address']); 
    $street = trim($_POST['street']); 
    $city = trim($_POST['city']); 
    $county = trim($_POST['county']); 

    if($lname==""){ 
     $error[] = "Provide Last Name."; 
    }elseif($address=""){ 
     $error[] = "Provide House Number/Name."; 
    }elseif($street==""){ 
     $error[] = "Provide Street."; 
    }elseif($city==""){ 
     $error[] = "Provide City."; 
    }elseif($county==""){ 
     $error[] = "Provide County."; 
    }else{ 
     try{ 
      $stmt = $conn->prepare("SELECT * FROM clients WHERE lname=lname AND address=address AND street=street AND city=city AND county=county"); 
      $stmt->execute(array("lname"=>$lname, "address"=>$address, "street"=>$street, "city"=>$city, "county"=>$county)); 
      $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 

      if($userRow==''){ 
       $user->redirect('./results.php?new='.$lname.$street); 
      }else{ 
       if($userRow['rating'] == 'good'){ 
        $user->redirect('./results.php?good='.$lname.$street); 
       } 
       if($userRow['rating'] == 'cautionextra'){ 
        $user->redirect('./results.php?cautionextra='.$lname.$street); 
       } 
       if($userRow['rating'] == 'cautiondiscount'){ 
        $user->redirect('./results.php?cautiondiscount='.$lname.$street); 
       } 
       if($userRow['rating'] == 'cautionlate'){ 
        $user->redirect('./results.php?cautionlate='.$lname.$street); 
       } 
       if($userRow['rating'] == 'badnopay'){ 
        $user->redirect('./results.php?badnopay='.$lname.$street); 
       } 
       if($userRow['rating'] == 'badabusive'){ 
        $user->redirect('./results.php?badabusive='.$lname.$street); 
       } 
      } 
     } 
     catch(PDOException $e){ 
      echo $e->getMessage(); 
     } 
    } 
} 

在phpMyAdmin执行SELECT * FROM clients WHERE lname=lname AND address=address AND street=street AND city=city AND county=county返回所有行的,伟大的,但我var_dump($userRow);,它显示的其中一个我试图寻找不同行的结果。

+0

否,所有这些列都需要得到结果。这是一个非常具体的搜索 –

+0

最有可能大写不匹配。你有没有试过通过MySQL运行这个查询? – Akshay

+0

没有我看到的,一切都是小写排除条件,是的,我得到0错误。 –

回答

1

的问题是,使用为search列的equality test使得它很难得到与之匹配的任何行,因为:

  • 输入的值必须匹配与表格行中的列完全相同。
  • 必须输入所有搜索栏。如果它们是空的,那么它们将永远不匹配任何行。

该方法与搜索领域是:

  • 尝试approximately matchinput valuecolumn value使用like代替=作为比较操作。
  • 作出empty input value匹配任何列值。即忽略测试

所供给的代码将生成的代码:column like %为空的输入或将包装在通配符的输入值:column like %input value%

Untested source at Pastebin.com

未经测试的代码:

<?php // completely untested code... 
    $stmt = $conn->prepare("SELECT * 
          FROM clients 
          WHERE lname like :lname 
          AND address like :address 
          AND street like :street 
          AND city like :city 
          AND county like :county"); 

    $stmt->execute(array("lname" => empty($lname) ? '%' : '%'. $lname .'%', 
         "address" => empty($address) ? '%' : '%'. $address .'%', 
         "street" => empty($street) ? '%' : '%'. $street .'%', 
         "city" => empty($city) ? '%' : '%'. $city .'%', 
         "county" => empty($county) ? '%' : '%'. $county .'%')); 

    $userRow = $stmt->fetch(PDO::FETCH_ASSOC); 
+0

感谢您发布答案。 –

1

你不需要:":lname"execute(array(...))只是使用前面没有冒号的索引:"lname"

全线:

$stmt->execute(array("lname"=>$lname, "address"=>$address, "street"=>$street, "city"=>$city, "county"=>$county)); 
+0

缓存清除后,这个snot snot工作,在任何PC上,它只是刷新搜索页面的空白字段。任何想法?有问题的更新代码。 –