我的名为genres
的表是这样的:
tmdb_id genres_name
5 Action
5 Adventure
5 Science Fiction
6 Crime
6 Comedy
现在,我想更新此表,但问题是,我的代码更新表如下:
tmdb_id genres_name
5 Action
5 Action
5 Action
6 Crime
6 Crime
它在具有相同id的所有行中更新相同的值。我想要不同的价值观。
注意:由于某些原因,我无法使用主键(自动增量)。
这是我的完整代码:
这就是我从页面接收数据的方式:
$response = file_get_contents("https://api.themoviedb.org/3/movie/550?api_key=xxxxxx");
if ($response != FALSE) {
$response = json_decode($response, true);
}
以下是页面内容的示例:
{
"genres": [
{
"name": "Action"
},
{
"name": "Adventure"
},
{
"name": "Science Fiction"
}
]
}
以下是我插入数据的方法
$stmt = $conn->prepare("UPDATE genres SET genres_name = :genres_name WHERE tmdb_id = :tmdb_id");
$stmt->bindParam(':tmdb_id', $tmdb_id,PDO::PARAM_INT);
$stmt->bindParam(':genres_name', $genres_name,PDO::PARAM_INT);
if (isset($response["genres"]) && is_array($response["genres"]))
{
foreach ($response["genres"] as $genreObject)
{
$genres_name = $genreObject["name"];
$stmt->execute();
}
}
原始结果:
这是它在Genres
表
tmdb_id genres_name
5 Action
5 Action
5 Action
tmdb_id genres_name
5 Action
5 Adventure
5 Science Fiction
答案 0 :(得分:0)
要更新任何特定行,您需要拥有键列。正如您已经提到的那样,您无法使用主键(自动增量)。但是,你可以拥有复合键吗?其中列的组合充当唯一行。
因此,您可以在where子句中添加genres_name
列。
$stmt = $conn->prepare("UPDATE genres SET genres_name = :genres_name WHERE tmdb_id = :tmdb_id and genres_name = :genres");
$stmt->bindParam(':tmdb_id', $tmdb_id,PDO::PARAM_INT);
$stmt->bindParam(':genres_name', $genres_name,PDO::PARAM_INT);
$stmt->bindParam(':genres', $genres_name_to_be_updated,PDO::PARAM_INT);