2017-01-26 101 views
-1

我的數據庫中的數據有一個名稱列表,每個名稱都有一個ID。當名稱與搜索到的名稱相匹配時,我試圖做一個簡單的搜索來提取人員ID。MYSQL SELECT查詢與WHERE不工作

if(isset($_POST['submit'])&& empty($_POST['personName'])==FALSE){ 
    $name=$_POST['personName']; 

    if (!preg_match("/^[a-zA-Z ]*$/",$name)) { 
     echo "No numeric characters allowed"; 
    }else{ 
     include('connect.php'); 
     if($con==false){ 
     }else if ($con==true){ 
      $cleanName=mysqli_real_escape_string($con,$name); 
      $getPersonID="SELECT person_ID FROM person WHERE Name='$cleanName'"; 
      $resultGetPersonID=mysqli_query($con,$getPersonID)or die(mysqli_error($con)); 
      if(mysqli_num_rows($resultGetPersonID)>0){ 
       echo "query sucessrful"; 
      }else{ 
       echo "query failed"; 
      } 

     } 
    } 

}else{ 
    echo "Data entered wrong"; 
} 

HTML

 <div class="searchBox"> 
    <form action="getPerson.php" method="POST"> 
     Name: <input id='personName' type="text" name="personName" >&nbsp;<input type="submit" value="Search" id="search" name="submit"> 

    </form> 
    </div> 

Person Table

Structure

+0

我們需要的表結構,以幫助。另外,$ clearName是在哪裏初始化的? –

+1

不要試圖擺脫像'$ x == false'這樣的習慣。大多數方法被設計爲返回真實的值,所以你可以做'if($ con)'沒有所有的大驚小怪。 – tadman

+2

**警告**:使用'mysqli'時,您應該使用[參數化查詢](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和['bind_param']( http://php.net/manual/en/mysqli-stmt.bind-param.php)將用戶數據添加到您的查詢中。 **不要**使用手動轉義和字符串插值或串聯來實現此目的,因爲如果您忘記正確地轉義某些內容,您將創建嚴重的[SQL注入漏洞](http://bobby-tables.com/)。 – tadman

回答

0

如果要檢索的ID爲其match輸入,那麼你可能想嘗試與like運營商,如名稱:

SELECT person_ID FROM person WHERE Name like %<input>% 

不區分大小寫的匹配,可以嘗試使用lower功能和較低的情況下,通過名稱,g.g:

SELECT person_ID FROM person WHERE lower(Name) like %<input>% 
+0

''需要放什麼? %%? –

+0

'$ cleanName'需要代替

+0

請問爲什麼它有效?或者爲什麼簡單=輸入不起作用? –