Php 在指定区域外回声的值

Php 在指定区域外回声的值,php,html,Php,Html,我们有这样一个函数: 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 $

我们有这样一个函数:

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
ing而不是
return
,但是是什么导致了这个问题呢?

在函数中回显td标记,或者返回$results

在函数中回显td标记,或者像您自己说的那样返回$results

echo
而不是
return
是问题所在
echo
仅在遇到该方法时打印到屏幕上。一种可能的解决方案是,在整个while循环中,将结果累积在变量
$output
中。完成后,返回
$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;
}

正如您自己所说,
echo
而不是
return
是问题所在
echo
仅在遇到该方法时打印到屏幕上。一种可能的解决方案是,在整个while循环中,将结果累积在变量
$output
中。完成后,返回
$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;
}

当您运行函数时,页面在处理函数中的回显请求之前,先处理该函数中的回显请求,然后进行回显,但不返回任何值


由于您显然希望关闭DB连接,一个好的替代方法是在循环期间将结果存储为变量,然后在关闭连接后返回变量。这样,当您回显$get时,它会回显函数return。

当您运行函数时,页面会在函数中处理回显请求,然后在页面上处理回显请求,因此会回显它,而不返回任何值


由于您显然希望关闭DB连接,一个好的替代方法是在循环期间将结果存储为变量,然后在关闭连接后返回变量。这样,当您回显$get时,它会回显函数return。

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

<?php
echo '<td>';
getthis($x);
echo '</td>';
?>
或执行输出缓冲:

<?php

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

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

?>


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

<?php
echo '<td>';
getthis($x);
echo '</td>';
?>
或执行输出缓冲:

<?php

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

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

?>

您的函数需要
返回数据,而不是
回送数据。现在您正在调用函数
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;
}

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

您的函数需要
返回数据,而不是
回送数据。现在您正在调用函数
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;
}

另一方面,我不会在这样的函数中打开和关闭连接。您可能增加了不必要的开销。

“可能是回音而不是“return”导致了此问题?”是的。但是return中断函数,只返回一个值,为什么它不回显到标记中?“可能是回显而不是“return”导致了这个问题?”是的。但是return中断了函数,只返回一个值,为什么它不回显到标记中呢?closeDBCon($dbc)需要
closeDBCon($dbc)需要
我认为你为他提供多种解决方案很好,但有些解决方案比其他的好。你可能想强调哪个更可取。@Kristianantosen:这取决于
getthis()
是否可以更改,但我确实按优先顺序列出了它们。当退出
循环时,它不再知道
$output
。不过,公平地说,我不同意。用任意的方法在屏幕上打印是一种无政府状态和糟糕的做法。这使得您以后无法决定发送新的头。@W2-S
$output
循环时在
之外声明,因此在执行
返回$output
时,它仍在范围内。我认为您为他提供多个解决方案很好,但有些解决方案比其他解决方案更好。你可能想强调哪个更可取。@Kristianantosen:这取决于
getthis()
是否可以更改,但我确实按优先顺序列出了它们。当退出
循环时,它不再知道
$output
。不过,公平地说,我不同意。用任意的方法在屏幕上打印是一种无政府状态和糟糕的做法。这使得您以后无法决定发送新的头。@W2-S
$output
while
循环之外声明,因此在执行
return$output
时它仍在范围内。正如我对minitech所说的,在退出
while
循环时,它不再知道
$response
$results
。@W2-S您应该共享更新的代码-
$response
在适当的范围内,如果您遵循上面的示例,函数可以返回它。正如我对minitech所说的,当退出
循环时,它不再知道
$response
$results
。@W2-S您应该共享更新的代码-
$response
在适当的范围内,如果您遵循上述示例,函数可以返回它。