doukuang1897 2013-09-19 18:02
浏览 40
已采纳

php函数没有返回数组

I have the following code, sorry for the length but it saves explaining most of what i need... the $result in the pages() function is not being returned. When I call for it all I get is undefined variable. Why? What i need is to pass the $start and $display variables to the mysql query.

<?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条回答 默认 最新

  • doulun1939 2013-09-19 18:06
    关注

    In this line:

    pages($stmt);
    

    The function pages() returns the array, but this result is not being set to a variable. Try using:

    $result = pages($stmt);
    

    And then accessing the array via the variable $result.

    That $result variable that you declared up top? The reason it's not being set is because the function pages() doesn't have access to it because it's not within the function's scope.

    Edit

    As Lyth pointed out, if you don't want the function to return anything, you can modify your function as follows:

    function pages($stmt) {
        global $result;
        // ...
        // The rest of your function
        // ...
        $result = array(0=>$display, 1=>$pages , 2=>$start);
        // Remove the 'return $result' line
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测