Запросы PHP MYSQLI

Итак, у меня есть 2 таблицы в одной базе данных, и они связаны друг с другом переменной. Как я могу получить часть информации из одной таблицы и использовать ее, чтобы выбрать из другой таблицы все, что имеет это значение?

$term = $_REQUEST["term"];

$films = array();

if (isset($term)) {

    $sqlFilms = "SELECT * FROM films WHERE title LIKE '%" . $term . "%'";

} else {

    $sqlFilms = "SELECT * FROM `films`";

}

$resultFilms = mysqli_query($link, $sqlFilms);


while ($row = mysqli_fetch_array($resultFilms, MYSQLI_BOTH)) {
    $films[] = Array("id" => $row["id"],
        "title" => $row["title"],
        "poster" => $row["poster"],
        "description" => $row["description"],
        "director" => $row["director"]);
};

Этот код работает нормально, и я могу получить доступ ко всем «фильмам», в названии которых есть $ term. Но если я ищу жанр, который представляет собой другую таблицу, но имеет переменную с именем «film_id», которая равна «id» фильма, с которым он связан, я либо получаю все фильмы, либо не получаю никаких фильмов. Это код, чтобы попробовать фильм по жанрам.

$genreFilms = array();
$stuff = array();

if (isset($term)) {

    $sqlGenreFilmIDs = "SELECT film_id FROM genres WHERE genre LIKE '%" . $term . "%'";

    $resultGenres = mysqli_query($link, $sqlGenreFilmIDs);

    $sqlGenreFilms = "SELECT * FROM films WHERE id LIKE '%" . $stuff["film_id"] . "%'";

} else {

    $sqlGenreFilms = "SELECT * FROM `films`";

}

$resultGenreFilms = mysqli_query($link, $sqlGenreFilms);


while ($genrerow = mysqli_fetch_array($resultGenreFilms, MYSQLI_BOTH)) {
    $genreFilms[] = Array("id" => $genrerow["id"],
        "title" => $genrerow["title"],
        "poster" => $genrerow["poster"],
        "description" => $genrerow["description"],
        "director" => $genrerow["director"]);
};
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
33
2

Ответы 2

Если вы хотите ограничить поиск фильмов жанром, вам следует использовать sql join или подзапросы. Например,

$sqlGenreFilms = "SELECT * FROM films WHERE id in (SELECT film_id from genres WHERE genre LIKE '%" . $term . "%')"

Обратите внимание, что для более сложных запросов вам действительно следует изучить язык SQL и то, как он работает.

И в любом случае вам обязательно стоит прочитать, почему использование переменных в тексте запроса в кавычках, как вы, считается чрезвычайно вредным с точки зрения безопасности. Google для "sql-инъекции".

Спасибо! Я ценю внимание к чтению по SQL, я изучаю PHP, и мы просто нарушаем эту тему.

K3rt3sz 03.05.2018 15:19
if (isset($term)) {
    $sqlGenreFilms = "SELECT * FROM films WHERE id in (SELECT film_id FROM genres WHERE genre LIKE '%" . $term . "%')";
    // if you want genre info and films info together use join
    //$sqlGenreFilms = "SELECT genres.*, films.* FROM genres left outer join films on genres.film_id = films.id WHERE genres.genre LIKE '%" . $term . "%')";
} else {
    $sqlGenreFilms = "SELECT * FROM `films`";
}

Можете одобрить мой ответ, если не возникнет вопросов .. :)

Pavan Sikarwar 04.05.2018 06:47

Другие вопросы по теме