Php Insert仅执行第一行
我有一个简单的查询,它从我的数据库返回一些结果,它返回4行,但当我插入时,它只执行第一行,然后停止,似乎没有为第一个查询返回的每一行执行插入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
$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());