У меня проблема с функциями поиска.
Когда мы сначала нажимаем кнопку поиска, мы ищем по названию, автору сообщения и тегам в таблице сообщений. Если у нас нет результата, я хочу выполнить поиск по названию категории в таблице категорий.
Если в первом поисковом запросе нет результата, мы получаем из таблицы категорий category_id и пытаемся найти по этому номеру категории сообщения из таблицы сообщений в 3-м запросе.
К сожалению, когда он нажал второй запрос, я получил строку: «Нет результатов поиска. Повторите попытку позже».
Кроме того, я получаю эту вторую строку запроса для целей отладки, и это:
SELECT cat_id FROM categories WHERE cat_title LIKE '%HTML%'
Когда я запускаю этот запрос в phpmyadmin, он возвращает 1 строку, как и предполагалось, но в моем php-коде он не работает. Не знаю почему. Может быть, что-то не так с этим оператором prepare, например, с методами close.
Я использую в своем коде 3 запроса stmt. Вот мой код:
if(isset($_POST['search']) && !empty($_POST['search'])) {
$search = escape($_POST['search']);
$search = "%{$search}%";
//FIRST WE ARE LOOKING BY TITLE, TAGS AND AUTHOR.
$stmt = mysqli_prepare($connection, "SELECT post_id, post_title, post_author, post_date, post_image, post_content, post_tags FROM " . DB_PREFIX . "posts WHERE post_tags LIKE ? OR post_title LIKE ? OR post_author LIKE ?");
mysqli_stmt_bind_param($stmt, "sss", $search, $search, $search);
mysqli_stmt_execute($stmt);
confirmQuery($stmt);
mysqli_stmt_bind_result($stmt, $post_id, $post_title, $post_author, $post_date, $post_image, $post_content, $post_tags);
mysqli_stmt_store_result($stmt);
if(mysqli_stmt_num_rows($stmt) === 0) {
mysqli_stmt_close($stmt);
//NOW WE ARE LOOKING BY CATEGORY
$search = escape($_POST['search']);
$search = "'%{$search}%'";
$stmt1 = mysqli_prepare($connection, "SELECT cat_id FROM " . DB_PREFIX . "categories WHERE cat_title LIKE ?");
mysqli_stmt_bind_param($stmt1, "s", $search);
mysqli_stmt_execute($stmt1);
confirmQuery($stmt1);
mysqli_stmt_bind_result($stmt1, $cat_id);
mysqli_stmt_fetch($stmt1);
mysqli_stmt_store_result($stmt1);
if(mysqli_stmt_num_rows($stmt1) === 0) {
//NO RESULT IN FIRST SEARCH AND SECOND SEARCH QUERY
mysqli_stmt_close($stmt1);
echo "<h1 class='search-no-result'>No Result of Search. Try again later.</h1>";
//DELETE THIS LATER.
echo "<h1 class='search-no-result'>SELECT cat_id FROM " . DB_PREFIX . "categories WHERE cat_title LIKE {$search}</h1>";
//--------------------
$no_result = true;
//IF THERE IS CATEGORY LIKE SEARCHED
} else {
//WE ARE LOOKING FOR POST FROM THIS CATEGORY
$stmt2 = mysqli_prepare($connection, "SELECT post_id, post_title, post_author, post_date, post_image, post_content, post_tags FROM " . DB_PREFIX . "posts WHERE post_category_id = ?");
mysqli_stmt_bind_param($stmt2, "i", $cat_id);
mysqli_stmt_execute($stmt2);
confirmQuery($stmt2);
mysqli_stmt_bind_result($stmt2, $post_id, $post_title, $post_author, $post_date, $post_image, $post_content, $post_tags);
}
} else {
$no_result = false;
}
} else {
redirect("/Udemy/cms/index");
}
Дополнительно могу сказать, что поиск хорошо работает с поиском по названию, автору и тегам. Только с категорией не получается.
Так в чем же проблема?
Что-то не так с запросами stmt или чем-то еще?
// EDIT
Я изменил запрос scond на:
$sql = "SELECT COUNT(*) AS cnt FROM " . DB_PREFIX . "categories WHERE cat_title LIKE ?";
Результат:
Нет результатов поиска. Попробуйте позже. ВЫБЕРИТЕ СЧЕТ (*) КАК ОТ
категории ГДЕ cat_title НРАВИТСЯ '% html%' | Cnt 0
Так что, очевидно, что-то не так с SQL-запросом, но когда я набираю этот запрос в phpmyadmin, я получаю такой результат:
cnt 1
Я думаю, что ошибка в том, что я делаю второй оператор подготовки после первого, но я думал, что $ stmt-> close () сделает это хорошо. Может быть, это так, но я не уверен.
У вас есть идеи, как это решить?