Кто-нибудь может сказать мне, что не так с этим запросом MySQL?

#php #mysql #sql

#php #mysql #sql

Вопрос:

Этот запрос, который я использую, возвращает ВСЕ данные в этой таблице. Я хочу выполнить поиск по ТОЧНОМУ идентификационному номеру и заставить его вернуть ТОЛЬКО этот результат. Кроме того, как я могу реализовать mysql_real_escape_string() здесь?

Спасибо!

 $term = $_POST['term'];

$sql = mysql_query("select * FROM patient WHERE id_number LIKE '%$term%'");

while ($row = mysql_fetch_array($sql)){

    echo 'ID: '                 .$row['id'];
    echo '<br/> First Name: '   .$row['first_name'];
    echo '<br/> Last Name: '    .$row['last_name'];
    echo '<br/> Business Name: '    .$row['business_name'];
    echo '<br/> ID Number: '    .$row['id_number'];
    echo '<br/><br/>';
} 
?>
  

Комментарии:

1. $term = $ _POST[‘term’]; $ sql = mysql_query(«выбрать * У пациента, ГДЕ id_number ПОХОЖ НА ‘% $ term%'»); if ($row = mysql_fetch_array ($ sql)){ echo ‘ID: ‘ .$row[‘id’]; echo ‘<br/> Имя пользователя: ‘ .$row[‘first_name’]; echo ‘<br/> Фамилия: ‘ . $ строка[‘last_name’]; echo'<br/> Название компании: ‘.$row[‘business_name’]; echo'<br/> Идентификационный номер: ‘ .$row[‘id_number’]; echo ‘<br/><br />’; } else{ print «<h1>НЕ НАЙДЕНО</h1>»; } ?>

2. Действительно, то, что сказал мистер Гаррисон … если $term пустое, то оно обязательно будет соответствовать всему.

3. У меня есть только одно маленькое поле поиска, где кто-то может ввести идентификационный номер <имя ввода = «термин»>…

4. тогда, как говорит OMGPonies, вы должны использовать оператор equation , а не оператор LIKE.

Ответ №1:

Используйте:

 $query = sprintf("SELECT p.*
                    FROM PATIENT p
                   WHERE p.id_number = '%s'",
                  mysql_real_escape_string($_POST['term']));

$result = mysql_query($query)

while($row = mysql_fetch_array($sql)) { ...
  

Ссылка:

Ответ №2:

Вы бы использовали mysql_real_escape_string() при пользовательском вводе, который в данном случае является $_POST['term'] .

Если вы хотите точного соответствия, то вам не следует использовать LIKE :

 $term = mysql_real_escape_string($_POST['term']);

$sql = mysql_query("select * FROM patient WHERE id_number = '$term'");
  

Комментарии:

1. это mysql_real_escape_string()

2. этот запрос не возвращает никаких результатов

3. @jeffrey-jones что echo "select * from patient where id_number = '$term'"; выводится при сбое запроса?

4. он просто возвращает ELSE- НЕ НАЙДЕНО

5. @jeffrey-jones каково значение $term ?

Ответ №3:

Если вы ищете только одну строку, вам действительно не следует использовать LIKE , но = , например:

 $sql = mysql_query( sprintf("select * FROM patient WHERE id_number='%s'", mysql_real_escape_string( $_POST['term'] ) ) );
  

Приведенное выше должно возвращать только одну строку, если: 1) id_number находится unique в patient , и 2) $term фактически соответствует значению id_number .

Надеюсь, это также отвечает на ваш вопрос о том, как использовать mysql_real_escape_string() , тоже!

Комментарии:

1. они по-прежнему возвращают NOT FOUND. id_number указан как «Поле», точно так же, как имя, фамилия и т.д..

2. @jeffrey каково значение $_POST['term'] ? его значение напрямую повлияет на то, что возвращается, даже если id_number столбец существует. вы должны проверить его значение и попытаться запустить запрос вручную в phpMyAdmin или командной оболочке или что-то в этом роде

3. Я не понимаю, почему мои входные данные в моей форме имеют name = «term» должно ли это переводить любую запись и искать id_number??

4. можете ли вы объяснить мне, что означал ваш вопрос? значение $ _POST[‘term’]? Я думал, что значение — это то, что пользователь вводит в поле поиска?

5. @jeffrey я просто имел в виду: при каких значениях $_POST['term'] весь запрос завершается ошибкой? мой пост выше (и другие посты по этому вопросу) должен работать, но нам трудно сказать, если мы не знаем, какие значения $_POST['term'] тестируются