0

你能帮我解决这个问题吗?我有这个代码:

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

4 回答 4

1

我假设您的意思是您不想在语句中执行该INSERT 项目。foreach如果是这种情况,更改exit;continue;which 将指示 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');
于 2013-02-11T13:17:49.573 回答
1

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

于 2013-02-11T13:22:08.527 回答
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

于 2013-02-11T13:17:46.643 回答
0

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

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

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

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

exit用于结束完整的 php 脚本,是die.

于 2013-02-11T13:22:56.240 回答