你能帮我解决这个问题。我有这段代码:
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
没有任何行时,它将退出循环而不会继续执行其余代码。但如果它确实有任何行,它将继续并执行插入查询。提前谢谢。
答案 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
的同义词。