我正在使用下面的代码处理一个神奇的简单保存类,每当我运行它时,只触发第一个if语句一次,数据只保存在logs_all表中一次。传递给函数的所有变量都很好。
我花了一个小时进行调试,老实说不知道问题是什么,有人可以帮忙吗?
function saveLog($logtype, $user, $category, $department, $item, $action) {
$logtype = 'all,buying';
$a = explode(",",$logtype);
foreach($a as $value) {
if($value == 'all') {
$db = new mysqli(DB_HOST,DB_USERNAME, DB_PASSWORD, DB_NAME);
$sql = "INSERT INTO logs_all (user, category, department, item, action, date) VALUES ('$user', '$category', '$department', '$item', '$action', NOW())";
$db->query($sql);
return $db->insert_id;
}
if($value == 'buying') {
$db = new mysqli(DB_HOST,DB_USERNAME, DB_PASSWORD, DB_NAME);
$sql = "INSERT INTO logs_buying (user, category, department, item, action, date) VALUES ('$user', '$category', '$department', '$item', '$action', NOW())";
$db->query($sql);
return $db->insert_id;
}
}
}
答案 0 :(得分:2)
return $db->insert_id;
这是你的问题。 return
语句返回函数的上下文,或者在全局情况下,完全返回PHP脚本。这意味着foreach
将停止执行该函数内的任何其他PHP代码。
答案 1 :(得分:2)
这是因为你正在使用回报。来自php.net:
如果在函数内调用,则return语句立即结束当前函数的执行,并返回其参数作为函数调用的值。 return也结束了eval()语句或脚本文件的执行。
您的功能在点击返回时终止。如果要返回每个项目,最好将ID保存到数组中,然后在循环结束后返回数组。
答案 2 :(得分:1)
您的代码第一次到达return
时,您正在退出该功能。
这是您的代码的简化版本,它使用了您的logtype与数据库中的表名相同的名称:
function saveLog($logtype, $user, $category, $department, $item, $action) {
$logtype = 'all,buying';
$a = explode(",",$logtype);
$result = array();
foreach($a as $value) {
$db = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
$sql = "INSERT INTO logs_" . $a . " (user, category, department, item, action, date) VALUES ('$user', '$category', '$department', '$item', '$action', NOW())";
$db->query($sql);
$result[] = $db->insert_id;
}
return $result;
}