PHP:获取函数的价值

时间:2014-07-07 18:30:38

标签: php mysql

这是我第一次在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;

}

为什么这个版本有效但不是我上面的功能版本?

2 个答案:

答案 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)

您应该使用return关键字来返回值。

使用return $activity_name;返回值

Echo用于输出一个或多个字符串