mysql — простой поиск PHP в базе данных не даст результата

Я создаю базу данных рецептов с некоторыми из моих друзей, и для этого нам нужно, чтобы наши пользователи могли осуществлять поиск на нашем сайте. Наша база данных состоит из 3 таблиц:

рецепты — recipe_id (основной ключ), recipe_name

ингредиенты — ingredient_id (основной ключ), ingredient_name

recipe_ingredients — ingredient_id (иностранный ключ), recipe_id (иностранный ключ)

Мы хотим иметь возможность искать recipe_ingredients по рецепту или названию ингредиента, и чтобы на нашем сайте отображался каждый ингредиент, связанный с этим рецептом, или каждый рецепт, связанный с этим ингредиентом. И вот мы сделали этот запрос:

select ingredient_name, recipe_name, recipe_ingredients.*
from recipe_ingredients
inner join ingredients inner join recipes
on recipe_ingredients.ingredient_id = ingredients.ingredient_id
and recipe_ingredients.recipe_id = recipes.recipe_id

WHERE ingredient_name = 'Brød';

Который работает хорошо для нас. Однако, добавив его в нашу функцию поиска в php, он выдает «результатов поиска не было!» назад каждый раз, независимо от того, что мы искали. Вот код Кто-нибудь укажет на ошибку, которую мы сделали?

$output = '';
if (isset($_POST['work'])) {
$searchq = $_POST['work'];
$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
$query = mysql_query

("select ingredient_name, recipe_name, recipe_ingredients.*
from recipe_ingredients
inner join ingredients inner join recipes
on recipe_ingredients.ingredient_id = ingredients.ingredient_id
and recipe_ingredients.recipe_id = recipes.recipe_id
WHERE ingredient_name LIKE '%searchq%' or recipe_name LIKE '%searchq%'")

or die ("Could not search");
$count = mysql_num_rows($query);
if($count == 0){
$output = 'There were no search results!';
}
else{
while ($row = mysql_fetch_array($query)) {
$recipe = $row[recipe_name];
$ingredient = $row[ingredient_name];
$id = $row[ingredient_id];

$output .= '<div>'.$recipe.' '.$ingredient.'</div>';
}
}
}

Мы не понимаем, почему это не сработает.

1

Решение

Вы можете попробовать следующее. Он использует функции mysqli_ * и лучшую структуру для соединения запросов.

$connection = mysqli_connect('localhost', 'root', 'your_password', 'your_database');
mysqli_set_charset($connection, 'utf8');
if (!$connection) {
die("Database connection failed: " . mysqli_error());
}

$output = '';
if (isset($_POST['work'])) {

$searchq = $_POST['work'];
$searchq = preg_replace("#[^0-9a-z]#i", "", $searchq);

$sql = "SELECT ingredient_name, recipe_name, recipe_ingredients.*
FROM recipe_ingredients
INNER JOIN ingredients
ON recipe_ingredients.ingredient_id = ingredients.ingredient_id
INNER JOIN recipes
ON recipe_ingredients.recipe_id = recipes.recipe_id
WHERE ingredient_name LIKE '%$searchq%' or recipe_name LIKE '%$searchq%'";

$result = mysqli_query($connection, $sql);
if (!$result) {
die("SQL Error: " . mysqli_error($connection);
}

$count = mysqli_num_rows($result);

if ($count == 0) {
$output = 'There were no search results!';
} else {
while ($row = mysqli_fetch_array($result)) {
$recipe = $row[recipe_name];
$ingredient = $row[ingredient_name];
$id = $row[ingredient_id];

$output .= '<div>'.$recipe.' '.$ingredient.'</div>';
}
}
}
1

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

Во-первых, это зависит от того, какую версию PHP вы используете, как указал Дженс, mysql_ * устарела.

Второе — не похоже, что вы подключаетесь к своей базе данных. Сначала вы должны подключиться к базе данных, а затем выполнить запрос.

Проверьте этот пример на Сайт PHP, это должно вам очень помочь.

Удачи!

0

Похоже, что вы ищете «searchq» все время, и у вас, вероятно, нет рецепта с таким именем, и я бы посоветовал agajnst mysql_ * funcs
$ output = »;
if (isset ($ _ POST [‘work’])) {
$ searchq = $ _POST [‘work’];
$ searchq = preg_replace («# [^ 0-9a-z] #
я», «», $ searchq);
$ query = mysql_query
(«выберите имя ингредиента, имя рецепта, ингредиенты рецепта. *
из recipe_ingredients
ингредиенты внутреннего соединения рецепты внутреннего соединения
на recipe_ingredients.ingredient_id = ингридиенты.ingredient_id
и recipe_ingredients.recipe_id = recipes.recipe_id
ГДЕ имя ингредиента НРАВИТСЯ ‘%
$ searchq% ‘или recipe_name LIKE’%
$ Searchq% ‘ «)

0