这是我第一次在PHP脚本中使用函数。不知怎的,我无法从函数返回值。
以下是我的脚本的相关部分:
// FUNCTIONS
// ---------
function getActivityName($event_types_id) {
$query_activity_name = "SELECT * FROM event_types WHERE id=$event_types_id";
$results_activity_name = $db->query($query_activity_name);
while ($result_activity_name = $results_activity_name -> fetch_assoc()) {
$activity_name = $result_activity_name['title'];
}
echo $activity_name;
}
// DO SEARCH AND OUTPUT RESULTS
// ----------------------------
$results = $db -> query($query);
if (mysqli_num_rows($results) > 0) {
while ($result = $results -> fetch_assoc()) {
$response = '<div class="admin_event">';
$response .= '<a href="events-single.php?event_id='.$result['id'].'"><h3>' . $result['title'] . '</h3></a>';
$response .= '<p>' . getActivityName($result['event_types_id']) . '</p>';
$response .= '<p>' . $result['start'] . '</p>';
$response .= '</div>';
echo $response;
}
} else {
$response = '<p class="no_results">No results found. Please modify your selection.';
echo $response;
}
我的目标是根据event_types_id在$ response-loop中获取活动名称。我对该功能的使用有什么问题?
修改
当我使用&#34;返回&#34;时,代码不工作而不是&#34; echo&#34;在函数getActivityName()的末尾。它只在我在$ response循环中使用函数代码时才有效:
// DO SEARCH AND OUTPUT RESULTS
// ----------------------------
$results = $db -> query($query);
if (mysqli_num_rows($results) > 0) {
while ($result = $results -> fetch_assoc()) {
// get name of event type
$event_types_id = $result['event_types_id'];
$query_activity_name = "SELECT * FROM event_types WHERE id=$event_types_id";
$results_activity_name = $db->query($query_activity_name);
while ($result_activity_name = $results_activity_name -> fetch_assoc()) {
$activity_name = $result_activity_name['title'];
}
$response = '<div class="admin_event">';
$response .= '<a href="events-single.php?event_id='.$result['id'].'"><h3>' . $result['title'] . '</h3></a>';
$response .= '<p>' . $activity_name . '</p>';
$response .= '<p>' . $result['start'] . '</p>';
$response .= '</div>';
echo $response;
}
} else {
$response = '<p class="no_results">No results found. Please modify your selection.';
echo $response;
}
为什么这个版本有效但不是我上面的功能版本?
答案 0 :(得分:4)
你正在回应$activity_name
。您希望return
它,以便可以分配返回的值。
而不是:
echo $activity_name;
使用:
return $activity_name;
此外,您应该在启用error_reporting
的情况下进行开发:
error_reporting(E_ALL);
ini_set('display_errors', '1');
这会告诉您$db
不是对象,也不是其他问题。您需要传入$db
才能在函数中使用它。此外,您有一个未使用的var,并且您不需要一个记录的循环。考虑使用LIMIT
:
function getActivityName($db, $event_types_id) {
$query_activity_name = "SELECT * FROM event_types WHERE id=$event_types_id LIMIT 1";
$results_activity_name = $db->query($query_activity_name);
$activity_name = $results_activity_name->fetch_assoc();
return $activity_name['title'];
}
用以下方式调用:
getActivityName($db, $result['event_types_id'])
答案 1 :(得分:0)