如何在PHP MySQL中更新具有相同ID但不同值的行

时间:2017-08-19 08:29:11

标签: php mysql

我的名为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

1 个答案:

答案 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);