我有两个表(艺术家,cd),我试图使用第一个查询的结果,该查询返回一个artID并使其与第二个表(Cd)中的artID相等,其中artID是外键,但我不知道如何做。任何帮助都将不胜感激。
$strqueryID="SELECT artID FROM artist WHERE artName= '" . $_POST["category"] . "' ";
$resultsID=mysql_query ($strqueryID) or die(mysql_error());
$strqueryCD="INSERT INTO cd SET cdTitle='" . $_POST['title'] . "', artID='" . ??? . "' cdPrice='" . $_POST['price'] . "', cdGenre='" . $_POST['genre'] . "', cdNumTracks='" . $_POST['tracks'] . "'";
$resultsCD=mysql_query ($strqueryCD) or die(mysql_error());发布于 2017-05-01 12:53:42
您可以使用一个查询,如下所示:
$strqueryCD="
INSERT INTO cd (cdTitle, artID, cdPrice, cdGenre, cdNumTracks)
VALUES(
'" . $_POST['title'] . "',
(SELECT artID FROM artist WHERE artName= '" . $_POST["category"] . "'),
'" . $_POST['price'] . "',
'" . $_POST['genre'] . "',
'" . $_POST['tracks'] . "')
";此外,在继续之前,请使用google 'sqlinjection‘
发布于 2017-05-01 12:54:32
所以,第一件事是--现在你不应该在2017年使用mysql_*函数了。我的意思是,实际上,它们实际上在PHP (7.0+)的后期版本中被删除了。有关更多信息,请参考this StackOverflow post。
现在,为了你手头的问题。考虑到您已经搜索(并找到)了一个给定的artID,您首先必须从$resultsID变量中获取实际的“行”。在本例中,我们将在一个典型的while循环中这样做:
while ($row = mysql_fetch_assoc($resultsID)) {
$strqueryCD="INSERT INTO cd SET cdTitle='" . $_POST['title'] . "', artID='" . $row['artID'] . "' cdPrice='" . $_POST['price'] . "', cdGenre='" . $_POST['genre'] . "', cdNumTracks='" . $_POST['tracks'] . "'";
$resultsCD=mysql_query ($strqueryCD) or die(mysql_error());
}这现在应该循环到您在第一个查询中找到的artIDs,并在随后的insert(s)中使用它们。
--
免责声明:我忽略了这样一个事实,即用户输入被直接传递到查询本身,因为这篇文章“超出了范围”。
https://stackoverflow.com/questions/43719296
复制相似问题