php函数没有返回数组

时间:2013-09-19 18:02:43

标签: php function

我有以下代码,抱歉长度,但它可以节省解释我需要的大部分内容...... 没有返回pages()函数中的$ result。当我呼唤它时,我得到的是未定义的变量。为什么? 我需要的是将$ start和$ display变量传递给mysql查询。

<?php
if(isset($_POST['get_records_submit'])) {
    $pages; $start; $display; $result;
    function pages($stmt) {
        //set how many records per page
        $display = 10;
        //determine how many pages there are
        if(isset($_GET['p']) && is_numeric($_GET['p'])) { //already determined
            $pages = $_GET['p'];
        }
        else {
            $records = mysqli_stmt_num_rows($stmt);
        }
        //calculate the number of pages
        if($records > $display) { //if there are more records than will fit on one page
            $pages = ceil($records/$display); //ceil() rounds up to the nearest integer
        }
        else { //records will fit on one page
            $pages = 1;
        }
        //determine which row to start returning results from
        if(isset($_GET['s']) && is_numeric($_GET['S'])) { //already determined
            $start = $_GET['s'];
        }
        else {
            $start = 0;
        }
        $result = array(0=>$display, 1=>$pages , 2=>$start);
        return $result;
    }
    $searchby = $_POST['search_by'];
    $searchfor = $_POST['search_for'];
    $contact = 1;
    $i = 0;
    //set the initial query
    $query = "SELECT  client_id, title_desc, firstname, surname, house, street, town, city, county, postcode as count FROM address LEFT JOIN client USING (client_id) LEFT JOIN client_title USING (title_id) LEFT JOIN address_street USING (address_id) LEFT JOIN address_town USING (address_id) LEFT JOIN address_city USING (address_id) LEFT JOIN address_county USING (address_id) WHERE is_contact = ?";
    //depending on search terms, amend the query
    if($searchby == 'all') {
        $query .= " ORDER BY surname ASC, firstname ASC";
        $stmt = mysqli_prepare($dbc, $query);
        mysqli_stmt_bind_param($stmt, 'i', $contact);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_store_result($stmt);
        pages($stmt);
        var_dump ($result);
        foreach ($result as $var) { echo $var.' ';}
        mysqli_stmt_close($stmt);
        $query .= " ORDER BY surname ASC, firstname ASC LIMIT ?, ?";
        $stmt = mysqli_prepare($dbc, $query);
        mysqli_stmt_bind_param($stmt, 'iii', $contact, $start, $display);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_bind_result($stmt, $client_id, $stitle, $sfname, $ssname, $shouse,$sstreet, $stown, $scity, $scounty, $spostcode);      

        if($searchfor != '') {
            echo "<p>You searched under <span class=\"bold\">\"All\"</span>, therefore your search term <span class=\"bold\">\"$searchfor\"</span> has not been included.</p>";
        }
    }
}

2 个答案:

答案 0 :(得分:5)

在这一行:

pages($stmt);

函数pages()返回数组,但此结果未设置为变量。尝试使用:

$result = pages($stmt);

然后通过变量$result访问数组。

您声明的$result变量最高?它未被设置的原因是因为函数pages()无法访问它,因为它不在函数范围内。

修改

正如Lyth所指出的,如果你不希望函数返回任何东西,你可以按如下方式修改你的函数:

function pages($stmt) {
    global $result;
    // ...
    // The rest of your function
    // ...
    $result = array(0=>$display, 1=>$pages , 2=>$start);
    // Remove the 'return $result' line
}

答案 1 :(得分:0)

我不知道你为什么要写$ pages; $启动; $显示; $结果;?如果你想获得数组的值,试着使用这个......

$result = array($display, $pages , $start);
return $result;

您可以使用

检查数组
print_r ($result);