php - 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"]);
};
解决方案
如果要将搜索的电影限制为流派,则应使用 sql join 或子查询。例如,
$sqlGenreFilms = "SELECT * FROM films WHERE id in (SELECT film_id from genres WHERE genre LIKE '%" . $term . "%')"
请注意,对于更高级的查询,您应该真正阅读 SQL 语言及其工作原理。
无论如何,您绝对应该阅读,为什么像您这样在查询文本中引用变量,从安全角度来看被认为是极其有害的。谷歌“sql注入”。
推荐阅读
- sql-server - 将excel文件上传到sql server
- java - JAVA - 日志记录关闭时字符串连接的性能
- angular7 - 为 pwa angular 7 添加服务人员时出现问题
- shell - SFTP批处理文件从远程复制到本地
- shopify - 导入后的奇怪符号
- powershell - 忽略 PowerShell 脚本中的某些命令
- twitter-bootstrap - 如何更改 react-boostrap 组件中隐式使用的类?
- python - 将相同的 Canny 应用于两个不同的图像
- python - PyThreadState_SetAsyncExc 没有效果
- bash - 如何在 WSL2 中运行的 vscode 中设置 bash