首页 > 解决方案 > 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"]);
};

标签: phpsqlmysqli

解决方案


如果要将搜索的电影限制为流派,则应使用 sql join 或子查询。例如,

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

请注意,对于更高级的查询,您应该真正阅读 SQL 语言及其工作原理。

无论如何,您绝对应该阅读,为什么像您这样在查询文本中引用变量,从安全角度来看被认为是极其有害的。谷歌“sql注入”。


推荐阅读