#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']
тестируются