Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何修改多行的MySQL插入查询?_Php_Mysql - Fatal编程技术网

Php 如何修改多行的MySQL插入查询?

Php 如何修改多行的MySQL插入查询?,php,mysql,Php,Mysql,我正在尝试插入艺术家、歌曲和唱片标签的记录,同时检查数据库中是否存在数据 以下代码来自 我需要对此进行修改,以检查是否已经存在三个唯一值(来自3个单独的表),如果不存在,则插入它们。以下是我的尝试: <?php $query = "SELECT id FROM artistsTable WHERE artistName='Beyonce'"; $select_result = mysql_query($query);

我正在尝试插入艺术家、歌曲和唱片标签的记录,同时检查数据库中是否存在数据

以下代码来自


我需要对此进行修改,以检查是否已经存在三个唯一值(来自3个单独的表),如果不存在,则插入它们。以下是我的尝试:

<?php   

            $query = "SELECT id FROM artistsTable WHERE artistName='Beyonce'";
            $select_result = mysql_query($query);
            if (!mysql_num_rows($select_result)) {
                    $query = "INSERT INTO table SET artistName='Beyonce' AND artistImage='beyonce.jpg'";
                    $insert_result = mysql_query($query);
                    $artistID = mysql_insert_id();
            }
            else {
                    $row = mysql_fetch_assoc($select_result);
                    $artistID = $row['artistID'];
            }
            return $artistID;


            $query = "SELECT id FROM recordLabelTable WHERE labelName='Columbia Records'";
                $select_result = mysql_query($query);
                if (!mysql_num_rows($select_result)) {
                    $query = "INSERT INTO table SET labelName='Columbia Records'";
                    $insert_result = mysql_query($query);
                    $labelID = mysql_insert_id();
            }
            else {
                    $row = mysql_fetch_assoc($select_result);
                    $labelID = $row['labelID'];
            }
            return $labelID;



            $query = "SELECT id FROM songTable WHERE trackTitle='Crazy in Love' AND artistID=".$artistID." AND labelID=".$labelID."";
                $select_result = mysql_query($query);
                if (!mysql_num_rows($select_result)) {
                    $query = "INSERT INTO songTable SET trackTitle='Crazy in Love' AND artistID=".$artistID." AND labelID=".$labelID."";
                    $insert_result = mysql_query($query);
                    $songID = mysql_insert_id();
            }
            else {
                    $row = mysql_fetch_assoc($select_result);
                    $songID = $row['songID'];
            }
            return $songID;


    ?>


我认为必须有一种更有效的方法来做到这一点。任何想法都将不胜感激。

使用基本的插入/忽略语法,您可以这样做

<?php   

/* ESTABLISH CONNECTION */

$con=mysqli_connect("Host","Username","Password","Database"); /* REPLACE NECESSARY DATA */

if(mysqli_connect_errno()){

echo "Error".mysqli_connect_error();
}


/*              FOR artistsTable TABLE              */

$query = "SELECT id FROM artistsTable WHERE artistName='Beyonce'";
$select_result = mysqli_query($con,$query); /* EXECUTE QUERY */
if (mysqli_num_rows($select_result)==0) { /* IF QUERY'S RESULT IS 0 */

   $query = "INSERT INTO table SET artistName='Beyonce' AND artistImage='beyonce.jpg'";
   $insert_result = mysqli_query($con,$query); /* EXECUTE INSERT QUERY */

} /* END OF IF */

else {

   while($row = mysqli_fetch_array($select_result)){
   $artistID = mysqli_real_escape_string($con,$row['artistID']); /* ESCAPE STRING */
   } /* END OF WHILE LOOP */

} /* END OF ELSE */


/*              FOR recordLabelTable TABLE              */

$query = "SELECT id FROM recordLabelTable WHERE labelName='Columbia Records'";
$select_result = mysqli_query($con,$query); /* EXECUTE SELECT QUERY */

if (mysqli_num_rows($select_result)==0) { /* IF QUERY'S RESULT IS 0 */
   $query = "INSERT INTO table SET labelName='Columbia Records'";
   $insert_result = mysqli_query($con,$query); /* EXECUTE INSERT QUERY */
}

else {
   while($row = mysqli_fetch_array($select_result)){
   $labelID = mysqli_real_escape_string($con,$row['labelID']); /* ESCAPE STRING */
   }
}


/*              FOR songtable TABLE              */

$query = "SELECT id FROM songTable WHERE trackTitle='Crazy in Love' AND artistID='$artistID' AND labelID='$labelID'";

$select_result = mysqli_query($con,$query); /* EXECUTE SELECT QUERY */
if (mysqli_num_rows($select_result)==0) {

   $query = "INSERT INTO songTable SET trackTitle='Crazy in Love' AND artistID='$artistID' AND labelID='$labelID'";
   $insert_result = mysqli_query($con,$query); /* EXECUTE QUERY */

} /* END OF IF */

else {
   while($row = mysqli_fetch_array($select_result)){
   $songID = mysqli_real_escape_string($con,$row['songID']);
   } /* END OF WHILE LOOP */
}

?>
两个插入,用于输入艺术家详细信息和标签详细信息,然后基于选择插入:-

<?php   
    $query = "INSERT IGNORE INTO artistTable (artistName, artistImag) VALUES('Beyonce', 'beyonce.jpg')";
    $insert_result = mysql_query($query);

    $query = "INSERT IGNORE INTO labelTable (labelName) VALUES('Columbia Records')";
    $insert_result = mysql_query($query);

    $query = "INSERT IGNORE INTO songTable (trackTitle, artistID, labelID)
            SELECT 'Crazy in Love', a.artistID, b.labelID
            FROM artistTable a
            INNER JOIN labelTable b
            ON a.artistName = 'Beyonce'
            AND a.artistImag = 'beyonce.jpg'
            AND b.labelName = 'Columbia Records'";
    $insert_result = mysql_query($query);
    $songID = mysql_insert_id();
    return $songID;
?>

使用基本的inset/ignore语法,您可以这样做

两个插入,用于输入艺术家详细信息和标签详细信息,然后基于选择插入:-

<?php   
    $query = "INSERT IGNORE INTO artistTable (artistName, artistImag) VALUES('Beyonce', 'beyonce.jpg')";
    $insert_result = mysql_query($query);

    $query = "INSERT IGNORE INTO labelTable (labelName) VALUES('Columbia Records')";
    $insert_result = mysql_query($query);

    $query = "INSERT IGNORE INTO songTable (trackTitle, artistID, labelID)
            SELECT 'Crazy in Love', a.artistID, b.labelID
            FROM artistTable a
            INNER JOIN labelTable b
            ON a.artistName = 'Beyonce'
            AND a.artistImag = 'beyonce.jpg'
            AND b.labelName = 'Columbia Records'";
    $insert_result = mysql_query($query);
    $songID = mysql_insert_id();
    return $songID;
?>

使用基本的inset/ignore语法,您可以这样做

两个插入,用于输入艺术家详细信息和标签详细信息,然后基于选择插入:-

<?php   
    $query = "INSERT IGNORE INTO artistTable (artistName, artistImag) VALUES('Beyonce', 'beyonce.jpg')";
    $insert_result = mysql_query($query);

    $query = "INSERT IGNORE INTO labelTable (labelName) VALUES('Columbia Records')";
    $insert_result = mysql_query($query);

    $query = "INSERT IGNORE INTO songTable (trackTitle, artistID, labelID)
            SELECT 'Crazy in Love', a.artistID, b.labelID
            FROM artistTable a
            INNER JOIN labelTable b
            ON a.artistName = 'Beyonce'
            AND a.artistImag = 'beyonce.jpg'
            AND b.labelName = 'Columbia Records'";
    $insert_result = mysql_query($query);
    $songID = mysql_insert_id();
    return $songID;
?>

使用基本的inset/ignore语法,您可以这样做

两个插入,用于输入艺术家详细信息和标签详细信息,然后基于选择插入:-

<?php   
    $query = "INSERT IGNORE INTO artistTable (artistName, artistImag) VALUES('Beyonce', 'beyonce.jpg')";
    $insert_result = mysql_query($query);

    $query = "INSERT IGNORE INTO labelTable (labelName) VALUES('Columbia Records')";
    $insert_result = mysql_query($query);

    $query = "INSERT IGNORE INTO songTable (trackTitle, artistID, labelID)
            SELECT 'Crazy in Love', a.artistID, b.labelID
            FROM artistTable a
            INNER JOIN labelTable b
            ON a.artistName = 'Beyonce'
            AND a.artistImag = 'beyonce.jpg'
            AND b.labelName = 'Columbia Records'";
    $insert_result = mysql_query($query);
    $songID = mysql_insert_id();
    return $songID;
?>


可能的重复项我建议在重复项上使用INSERT。。。语法(可以调整为返回已经存在的行的id,而不是实际执行更新)。这将减少到3条insert语句,而不需要下面的selectsIgnore-我想我现在明白了-我将再次用代码注释:谢谢@Kickstart。感谢你的意见。我不知道复制密钥是如何工作的。。。如果我改为下面的代码,我还需要3条insert语句吗
$query=“插入到表集合unique1=value1和unique2=value2…在重复键更新id=LAST_INSERT_id(id)”$insert\u result=mysql\u query($query)$id=mysql_insert_id();返回$id仍然需要3条insert语句,但比3条selects语句和3条insert语句要好。您可以使用INSERT IGNORE替代,只需根据选择进行插入。可能的重复我建议在重复键上使用INSERT。。。语法(可以调整为返回已经存在的行的id,而不是实际执行更新)。这将减少到3条insert语句,而不需要下面的selectsIgnore-我想我现在明白了-我将再次用代码注释:谢谢@Kickstart。感谢你的意见。我不知道复制密钥是如何工作的。。。如果我改为下面的代码,我还需要3条insert语句吗
$query=“插入到表集合unique1=value1和unique2=value2…在重复键更新id=LAST_INSERT_id(id)”$insert\u result=mysql\u query($query)$id=mysql_insert_id();返回$id仍然需要3条insert语句,但比3条selects语句和3条insert语句要好。您可以使用INSERT IGNORE替代,只需根据选择进行插入。可能的重复我建议在重复键上使用INSERT。。。语法(可以调整为返回已经存在的行的id,而不是实际执行更新)。这将减少到3条insert语句,而不需要下面的selectsIgnore-我想我现在明白了-我将再次用代码注释:谢谢@Kickstart。感谢你的意见。我不知道复制密钥是如何工作的。。。如果我改为下面的代码,我还需要3条insert语句吗
$query=“插入到表集合unique1=value1和unique2=value2…在重复键更新id=LAST_INSERT_id(id)”$insert\u result=mysql\u query($query)$id=mysql_insert_id();返回$id仍然需要3条insert语句,但比3条selects语句和3条insert语句要好。您可以使用INSERT IGNORE替代,只需根据选择进行插入。可能的重复我建议在重复键上使用INSERT。。。语法(可以调整为返回已经存在的行的id,而不是实际执行更新)。这将减少到3条insert语句,而不需要下面的selectsIgnore-我想我现在明白了-我将再次用代码注释:谢谢@Kickstart。感谢你的意见。我不知道复制密钥是如何工作的。。。如果我改为下面的代码,我还需要3条insert语句吗
$query=“插入到表集合unique1=value1和unique2=value2…在重复键更新id=LAST_INSERT_id(id)”$insert\u result=mysql\u query($query)$id=mysql_insert_id();返回$id仍然需要3条insert语句,但比3条selects语句和3条insert语句要好。您可以使用INSERT IGNORE,只需根据选择进行插入即可。非常感谢您的整理!非常感谢。我必须开始使用MySQLi。谢谢你让我开始。在您看来,运行3条select/insert语句是最好的方法吗?我假设会有一个MySQL语句以某种方式运行所有3条语句。@drandom-您正在将数据插入三个不同的表中。据我所知,如果要将多个数据插入到同一个表中,则只能在一个查询中插入多个数据。非常感谢您的整理!非常感谢。我必须开始使用MySQLi。谢谢你让我开始。在您看来,运行3条select/insert语句是最好的方法吗?我假设会有一个MySQL语句以某种方式运行所有3条语句。@drandom-您正在将数据插入三个不同的表中。据我所知,如果要将多个数据插入到同一个表中,则只能在一个查询中插入多个数据。非常感谢您的整理!非常感谢。我必须开始使用MySQLi。谢谢你让我开始。在您看来,运行3条select/insert语句是最好的方法吗?我想