Отображение результатов в поисковой таблице (PHP)

Вероятно, об этом уже спрашивали, пожалуйста, не стесняйтесь связывать меня или что-то еще, я просто не мог найти именно то, что я после.

Это довольно просто, мне нужно отобразить результаты поисковой формы. Эта часть проста, и я могу заставить это работать. У меня проблемы с тем, что результаты не соответствуют тому, что искал пользователь.

Я вполне уверен, что мне нужно просто использовать оператор IF, но я не очень разбираюсь в PHP и не могу понять, как правильно отображать код.

Это то, что я до сих пор:

$query = "SELECT * FROM search WHERE isbn='$isbn' OR bookname='$bookname' OR author='$author' OR category='$category'";

if (!$query)
{
echo "No results found in the database. Please go back and search again.";
}

Мой вопрос: Как получить сообщение «Результаты не найдены …» для отображения, когда поиск пользователей ничего не соответствует в базе данных?

НОТА — Я очень быстро запутываюсь, когда пытаюсь понять определенные термины в PHP и SQL, поэтому постарайтесь объяснить свой ответ, как если бы вы были абсолютным новичком.

Спасибо заранее.

2

Решение

Вы хотите отобразить сообщение «Результаты не найдены», если в таблице базы данных не найдено ни одной строки.

Для этого вы можете использовать ниже код PHP и SQL:

$sql = "SELECT * FROM search WHERE isbn='$isbn' OR bookname='$bookname' OR author='$author' OR category='$category'";
$query = $db->prepare($sql);
$query->execute();
$rows = $query->fetch(PDO::FETCH_NUM);
if($rows[0]) {
// Row exists
} else {
echo "No results found in the database. Please go back and search again.";
}

Обратите внимание, что приведенный выше ответ уязвим для атак SQL-инъекций.
Чтобы предотвратить атаки с помощью SQL-инъекций, рекомендуется подготовить и связать все данные, отправленные пользователями. Вот лучший пример, показывающий, как можно предотвратить атаки с использованием SQL-инъекций: (полный пример, включая подключение к базе данных)

$db = new PDO($dsn);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$query = $db->prepare("SELECT * FROM search WHERE isbn=:isbn OR bookname=:bookname OR author=:author OR category=:category");
$query->execute([ ':isbn'=>$isbn, ':bookname'=>$bookname, ':author'=>$author, ':category'=>$category ]);
$rows = $query->fetch(PDO::FETCH_NUM);
if($rows[0]) {
// Row exists
} else {
echo "No results found in the database. Please go back and search again.";
}
1

Другие решения

Предполагая, что вы используете Mysqli ,

  //connect with mysql
$conn = mysqli_connect("localhost", "user", "password", "db");
//here is the query
if($result = mysqli_query($conn,"SELECT * FROM search WHERE isbn='$isbn' OR bookname='$bookname' OR author='$author' OR category='$category'")){
if(mysqli_num_rows($result) > 0){
//mysqli_num_rows() returns the number of rows in a result .
//when it is greater than zero, it has some results
}
else{
echo "No results found in the database. Please go back and search again.";
//Do something if no results returned
}
}
//finally free the results
mysqli_free_result($result);
mysqli_close($conn);
0

По вопросам рекламы [email protected]