MySQL多条件

时间:2015-11-02 20:34:15

标签: php mysql

我正在尝试搜索我的数据库,我最初只使用一个和条件,但现在有四个,它只会刷新页面,删除字段输入。

我尝试过只使用逗号,但这似乎也行不通。我一直无法在谷歌上找到关于他们的限制的任何信息,但也没有使用四个条件的例子。我可以尝试一种正确或更好的方式吗?

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);时,它会显示与我尝试搜索的行不同的行的结果。

2 个答案:

答案 0 :(得分:1)

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

全线:

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

答案 1 :(得分:1)

问题是对equality test列使用search会导致很难与任何行匹配,因为:

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

搜索字段的方法是:

  • 使用approximately match代替input value作为比较运算符,尝试column value like = {/ 1}}。
  • 使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);