-1

所以我在一个 php 文件中有一个 sql 语句,它与从用户那里获取输入的表单相关。当他们输入一种类型时,它会更新该列中的所有记录,而不是他们选择的特定记录。

我得到的原始语句是第一个代码,但它编辑了整个列。所以我一直在尝试其他条款,所以它只改变了匹配的album_id但没有任何运气。 样本表数据

$sql = "UPDATE album 
    SET genre_id = (SELECT genre_id
    FROM genre
    WHERE genreName='" . $_POST['lstGenre'] . "'
    )";

以上是我开始并继续返回的内容。 上面代码的结果改变了整个列中的流派

$sql = "UPDATE album 
    SET genre_id = (SELECT genre_id
    FROM genre
    WHERE genreName='" . $_POST['lstGenre'] . "'
    )
        FROM album
        WHERE album_id='" . $_POST['album_id'] . "'";

那是我尝试过的一个版本,但它没有更新任何东西。这就是我要找的: 每种情况的不同类型

这工作我解决了它:

$sql = "UPDATE album 
        SET genre_id = (SELECT genre_id
        FROM genre
        WHERE genreName='" . $_POST['lstGenre'] . "'
        )
        FROM album
        WHERE album_id='" . $thisAlbum['album_id'] . "'";
4

2 回答 2

0

您的查询应如下所示:

UPDATE album a       
    SET genre_id = (SELECT g.genre_id
                    FROM genre g
                    WHERE g.genreName = ?
                   )
    WHERE a.album_id = ?;

?参数的占位符。您应该使用参数将值传递给查询,而不是使用值来修改查询字符串。

于 2019-04-07T23:36:53.623 回答
0

几乎,但Update ... From ... Where ...不是有效的,你只需要去掉第二部分中的 From 部分。它应该是这样的

$sql = "UPDATE album 
SET genre_id = (SELECT genre_id
    FROM genre
    WHERE genreName='" . $_POST['lstGenre'] . "'
)
WHERE album_id='" . $_POST['album_id'] . "'";

编辑:另外,像这样的子查询只需要拉一行。确保流派表中没有多行与提供的流派名称匹配。尽管如果是这种情况,您应该会收到一个 sql 错误。

于 2019-04-07T23:27:22.777 回答