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 ではなく ingreturnですが、この問題の原因は何ですか?

4

5 に答える 5

1

関数を実行すると、ページはページ上のエコー要求よりも前に関数内のエコー要求を処理するため、値を返さずにエコーします。

明らかにDB接続を閉じたいので、ループ中に結果を変数として保存し、接続を閉じた後に変数を返すことをお勧めします。このように $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

関数は、データをing するreturnのではなく、データを必要とします。echo現在、関数 を呼び出しており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 に答える