如何在另一个查询中使用一个查询的结果(PHP / MySQL)

时间:2017-05-01 12:45:33

标签: php html mysql

我有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());

2 个答案:

答案 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并在后续插入中使用它们。

-

免责声明:我忽略了这样一个事实,即用户输入直接传递给查询本身,因为它太多了超出范围"对于这篇文章。