我们有这样的功能:
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>
结果不会显示在页面顶部。它可能是echo
而不是return
,但导致此问题的是什么?
答案 0 :(得分:1)
当你运行这个函数时,页面会在页面上的函数之前处理函数中的echo请求,然后回显它,而不返回任何值。
由于您显然想要关闭数据库连接,一个很好的选择是在循环期间将结果存储为变量,然后在关闭连接后返回变量。这样当你回显$ get时,它就会回显函数返回。
答案 1 :(得分: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>';
?>
答案 2 :(得分:1)
您的功能需要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;
}
在旁注中,我不会在这样的函数中打开和关闭连接。你可能会增加不必要的开销。
答案 3 :(得分:0)
回显函数中的td标记,否则返回$ results
答案 4 :(得分:0)
正如您所说,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;
}