Вероятно, об этом уже спрашивали, пожалуйста, не стесняйтесь связывать меня или что-то еще, я просто не мог найти именно то, что я после.
Это довольно просто, мне нужно отобразить результаты поисковой формы. Эта часть проста, и я могу заставить это работать. У меня проблемы с тем, что результаты не соответствуют тому, что искал пользователь.
Я вполне уверен, что мне нужно просто использовать оператор 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, поэтому постарайтесь объяснить свой ответ, как если бы вы были абсолютным новичком.
Спасибо заранее.
Вы хотите отобразить сообщение «Результаты не найдены», если в таблице базы данных не найдено ни одной строки.
Для этого вы можете использовать ниже код 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.";
}
Предполагая, что вы используете 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);