【问题标题】:continuing the execution of the code when false为假时继续执行代码
【发布时间】:2013-01-26 14:13:21
【问题描述】:

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

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 没有任何行时,它将退出循环并且不会继续执行其余代码。但如果它确实有任何行,它将继续并执行插入查询。提前谢谢你。

【问题讨论】:

    标签: php mysql sql loops for-loop


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        试试:

        $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

        【讨论】:

          【解决方案4】:

          我假设您的意思是您不想在foreach 语句中执行INSERT for 该项目。如果是这种情况,请将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');
          

          【讨论】:

          • 不,先生。插入查询是针对整个循环的。如果一个项目满足我的 if 语句中的条件,它不会继续到其余的代码。
          • @chris 你只想退出吗?或者您是否想要 break; 而不是这将停止循环的进一步迭代,但允许您在它之外做一些事情。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-09
          • 2020-06-14
          • 1970-01-01
          • 1970-01-01
          • 2021-02-26
          • 2014-12-14
          • 1970-01-01
          相关资源
          最近更新 更多