2017-01-26 5 views
-1

Данные в моей базе данных имеют список имен, и каждое имя имеет идентификатор. Я пытаюсь сделать простой поиск, чтобы вытащить идентификатор лица, когда имя совпадает с искомым именем.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

Если вы хотите, чтобы получить идентификаторы для имен, которые 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

Могу ли я спросить, почему это работает? Или почему простой = на вход не работает? –

Смежные вопросы