2015-11-02 51 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上,它只是刷新搜索頁面的空白字段。任何想法?有問題的更新代碼。 –