PHP MYSQLI 查询

Posted

技术标签:

【中文标题】PHP MYSQLI 查询【英文标题】:PHP MYSQLI queries 【发布时间】:2018-05-03 12:43:21 【问题描述】:

所以我在同一个数据库中有 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"]);
;

【问题讨论】:

【参考方案1】:

如果你想限制你搜索的电影类型,你应该使用 sql 连接或子查询。例如,

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

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

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

【讨论】:

谢谢!我很欣赏有关阅读 SQL 的提醒,我正在上 php 课程,我们只是违反了主题。【参考方案2】:
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`";

【讨论】:

如果没有任何问题,您可以批准我的回答.. :)

以上是关于PHP MYSQLI 查询的主要内容,如果未能解决你的问题,请参考以下文章

php PHP__mysqli查询

PHP php mysql / mysqli查询

MySQLi PHP:使用 MySQLi 检查 SQL INSERT 查询是不是完全成功

php PHP快速和简短的Mysqli查询

PHP7预编译mysqli查询操作

如何转义 php mysqli 查询? [复制]