在false时继续执行代码

时间:2013-02-11 13:15:52

标签: php mysql sql loops for-loop

你能帮我解决这个问题。我有这段代码:

foreach ($mat_desc as $mat_key => $materials) {
    $mat = explode(' | ', $materials);
    $mat_d = $mat[0];
    $mat_u = $mat[1];
    $m = mat_id_from_mat_desc($mat_d, $mat_u);

    $cur = mysql_result(mysql_query('SELECT `req_id` FROM `requestdetails` JOIN `request` USING(`req_id`) WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.$m.'" AND `req_qty` <> `current_rec_qty` ORDER BY `req_id` DESC'), 0);
    echo $cur;
    if(mysql_num_rows($cur) == 0){
        exit;
    }

    mysql_query ("INSERT INTO `receive` (`proj_id`,`rec_code`) VALUES ('$proj_id','$rec_code')");       

    $rec_id = mysql_insert_id();    

我想要实现的是,当$cur没有任何行时,它将退出循环而不会继续执行其余代码。但如果它确实有任何行,它将继续并执行插入查询。提前谢谢。

4 个答案:

答案 0 :(得分:1)

我认为你的意思是你不想在INSERT语句中执行该项目的foreach 。如果是这种情况,请将exit;更改为continue;,这将指示PHP停止执行循环中当前项的代码,在循环中前进一个元素并再次从顶部开始。

您还应该更改:

$cur = mysql_result(mysql_query('SELECT `req_id` FROM `requestdetails` JOIN `request` USING(`req_id`) WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.$m.'" AND `req_qty` <> `current_rec_qty` ORDER BY `req_id` DESC'), 0);

为:

 $cur = mysql_query('SELECT `req_id` FROM `requestdetails` JOIN `request` USING(`req_id`) WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.$m.'" AND `req_qty` <> `current_rec_qty` ORDER BY `req_id` DESC');

答案 1 :(得分:1)

如果您使用continue;代替exit;,它将跳转到循环中的下一个项目。如果您希望一劳永逸地结束循环,则可以使用break;代替exit;

答案 2 :(得分:0)

尝试:

$cur = mysql_query('SELECT `req_id` FROM `requestdetails` JOIN `request` USING(`req_id`) WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.$m.'" AND `req_qty` <> `current_rec_qty` ORDER BY `req_id` DESC');

echo $cur;
if(mysql_num_rows($cur) == 0){
   exit;
}

此外,您不应使用mysql_扩展程序。尝试使用PDO

答案 3 :(得分:0)

如果您想完全中止foreach循环,请使用break

if(mysql_num_rows($cur) == 0){
    break;
}

如果要进入foreach循环的下一次迭代,丢弃剩余的当前foreach迭代代码,请使用continue

if(mysql_num_rows($cur) == 0){
    continue;
}

exit用于结束完整的php脚本,并且是die的同义词。

相关问题