Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.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 Insert仅执行第一行_Php_Mysql - Fatal编程技术网

Php Insert仅执行第一行

Php Insert仅执行第一行,php,mysql,Php,Mysql,我有一个简单的查询,它从我的数据库返回一些结果,它返回4行,但当我插入时,它只执行第一行,然后停止,似乎没有为第一个查询返回的每一行执行插入 $sql = "SELECT t.ID AS 'TopicID', t.seminar_id AS 'SeminarID', rl.resourceid AS 'ResourceID', r.ResourceType AS 'ResourceType' FROM topic t LEFT JOIN resourcelink

我有一个简单的查询,它从我的数据库返回一些结果,它返回4行,但当我插入时,它只执行第一行,然后停止,似乎没有为第一个查询返回的每一行执行插入

$sql = "SELECT t.ID AS 'TopicID', t.seminar_id AS 'SeminarID', rl.resourceid AS 'ResourceID', r.ResourceType AS 'ResourceType'
        FROM topic t
        LEFT JOIN resourcelink rl ON rl.entityid = t.ID
        LEFT JOIN resources r ON r.ResourceID = rl.resourceid
        WHERE t.seminar_id = '124840'";
$result = mysql_query($sql);

// echo "<pre>";
// print_r($sql);
// echo "</pre>";

while($row = mysql_fetch_assoc($result))
{
    $resourceID = $row['ResourceID'];
    $resourceType = $row['ResourceType'];

    if ($resourceID != '' && $resourceType != 1)
    {
        $sql_insert = "INSERT INTO resourcelink (resourceid, entityid, entitytype, linkorder, viewinplayer)
                VALUES ($resourceID, $topicID, 1, 0, 0)";
        $result = mysql_query($sql_insert);
    }
}

原因是您在执行第一次插入时覆盖了$result变量。因此,当while循环的下一次迭代调用mysql\u fetch\u assoc$result时,它将获取插入的结果,而不是选择的结果

由于从未对插入的结果执行任何操作,因此无需指定变量。如果确实需要使用结果,则应使用不同的变量名。因此,改变:

        mysql_query($sql_insert) or die("Insert error: " . mysql_error());


如果您不需要显示数据,可以发出插入。。。选择省去了额外的往返。为什么不把和r1.resourceid!=和r.resourceType!=1,而不是在第二个循环中执行它们?您应该停止使用过时的mysql扩展。它在几年前就被弃用了,并在PHP7.0中被完全删除。现在使用PDO或mysqli。添加错误检查以查看失败的原因。将mysql\u错误放在mysql\u查询$sql\u插入行的末尾。注意使用的变量名。您正在修改while循环中的$result,因此将其重命名为类似于$result\u 1之类的无聊内容。另外,你甚至没有使用它,所以你需要重新思考。如果你使用echo mysql\u error;,你会泄露同样的信息;。泄漏源于显示SQL错误,而不是死亡。这主要是为了调试,在生产中应该更加小心。
        mysql_query($sql_insert) or die("Insert error: " . mysql_error());