PHP MYSQLI запросы - PullRequest
       6

PHP MYSQLI запросы

0 голосов
/ 03 мая 2018

Итак, у меня есть 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"]);
};

Ответы [ 2 ]

0 голосов
/ 03 мая 2018
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`";
}
0 голосов
/ 03 мая 2018

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...