0

我们有一个这样的函数:

function getthis($x){
    $dbc = getDBCon();

    if ($dbc) {
        $sql = "SELECT * FROM `names`";
        $res = mysqli_query($dbc, $sql);

        while($data = mysqli_fetch_array($res)){
            SOME PROCESS...
            echo $results; 
        }

        closeDBCon($dbc)
    }

并在页面中:

<?php

$get = getthis($x)
echo '<td>'.$get.'</td>';

?>

但它不会echo<tr>标签内产生,它们会出现在页面顶部。它可能是echoing 而不是return,但是是什么导致了这个问题?

4

5 回答 5

1

当您运行该函数时,页面会在页面上的请求之前处理函数中的回显请求,因此会回显它,但不返回任何值。

由于您显然想要关闭数据库连接,一个不错的选择是在循环期间将结果存储为变量,然后在关闭连接后返回变量。这样,当您回显 $get 时,它会回显函数返回。

于 2012-05-26T23:26:32.027 回答
1

是的,这就是问题所在。您可以echo按正确的顺序:

<?php
echo '<td>';
getthis($x);
echo '</td>';
?>

转换为return

function getthis($x) {
    $output = '';
    $dbc = getDBCon();

    if($dbc) {
        $sql = "SELECT * FROM `names`";
        $res = mysqli_query($dbc, $sql);

        while($data = mysqli_fetch_array($res)) {
            SOME PROCESS...

            $output .= $results;
        }

        closeDBCon($dbc);
    }

    return $output;
}

或者执行输出缓冲:

<?php

ob_start();
getthis($x);
$get = ob_get_contents();
ob_end_clean();

echo '<td>'.$get.'</td>';

?>
于 2012-05-26T23:26:33.540 回答
1

您的函数需要return数据,而不是echoing 它。现在你正在调用函数getthis(),它在内部打印数据。相反,您希望它返回值,以便您可以控制打印结果的位置:

function getthis( $x ) {
    $dbc = getDBCon();
    $response = false; /* Return false if no db connection was made */
    if( $dbc ) {
        $sql = "SELECT * FROM `names`";
        $res = mysqli_query( $dbc, $sql );
        $response = "";
        while( $data = mysqli_fetch_array( $res ) ){ 
            /* SOME PROCESS... */
            $response .= $results; /* Assuming you're returning a string */
        }
    closeDBCon($dbc);
    }
    return $response;
}

在旁注中,我不会在这样的函数中打开和关闭连接。您可能会增加不必要的开销。

于 2012-05-26T23:26:37.283 回答
0

在函数中回显 td 标记,否则返回 $results

于 2012-05-26T23:24:00.577 回答
0

正如您自己所说,echo而不是return问题所在。echo只是在遇到该方法时准确地打印到屏幕上。一个可能的解决方案是在$output整个 while 循环中将结果累积到一个变量中。完成后,返回$output.

function getthis($x){
    $dbc = getDBCon();
    $output = "";
    if($dbc) {
        $sql = "SELECT * FROM `names`";
        $res = mysqli_query($dbc, $sql);
        while($data = mysqli_fetch_array($res)){
            // SOME PROCESS...
            $output .= $results;
        }
        closeDBCon($dbc);
    }
    return $output;
}
于 2012-05-26T23:25:33.857 回答