我有2个表(艺术家,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());
答案 0 :(得分:1)
您可以使用一个查询,如下所示:
$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'在你继续之前
答案 1 :(得分:0)
所以,第一件事是第一件事 - 你现在不应该在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());
}
现在应该遍历您在第一个查询中找到的artID
并在后续插入中使用它们。
-
免责声明:我忽略了这样一个事实,即用户输入直接传递给查询本身,因为它太多了超出范围"对于这篇文章。