我的php功能看起来像
function generateTour ($lang, $db)
{
echo '<table border="0" cellpadding="0" cellspacing="0" width="100%">';
$title='title_'.$lang;
$txt='txt_'.$lang;
$result = $db->query("SELECT id, $title, $txt FROM 1_table");
$count= $result->num_rows;
$i=1;
while($row=$result->fetch_object())
{
if($i%3==0) echo '<tr>';
echo '<td width="33%">
<div class="tour_item" style="background-image:url(core/content/img/pages/1/slide/'.$row->id.'.png)">
<div class="tour_item_title"><a href="?id='.$row->id.'">';
echo '</a></div><div class="tour_item_text"><a href="?id='.$row->id.'"></div>
</div>';
if($i==$count-1) echo '</td></tr>';
else if($i%3==0) echo '</td></tr><tr>';
$i++;
}
echo '</table>';
}
如你所见,它逐行回应结果。不是一次全部。我想将所有变量收集到一个数组并返回此数组。可能吗?怎么做?
请不要发表关于安全漏洞的想法等等。我正在针对sql注入过滤$title, $txt
varibales。 (我有可能字段名称的数组。我的过滤器函数每次检查theese变量的值。)
答案 0 :(得分:0)
$data = array();
while ($row = $result->fetchObject()) {
$data[] = $row;
}
是在数组中缓存结果集的绝对最基本的方法。您只需将其修改为存储生成的html。
答案 1 :(得分:0)
试试这个:
function generateTour ($lang, $db)
{
$output = '<table border="0" cellpadding="0" cellspacing="0" width="100%">';
$title='title_'.$lang;
$txt='txt_'.$lang;
$result = $db->query("SELECT id, $title, $txt FROM 1_table");
$count= $result->num_rows;
$i=1;
while($row=$result->fetch_object())
{
if($i%3==0)
{
$output .= '<tr>';
}
$output .= '<td width="33%">
<div class="tour_item" style="background-image:url(core/content/img/pages/1/slide/'.$row->id.'.png)">
<div class="tour_item_title"><a href="?id='.$row->id.'">
</a></div><div class="tour_item_text"><a href="?id='.$row->id.'"></div>
</div>';
if($i==$count-1)
{
$output .= '</td></tr>';
}
else if($i%3==0)
{
$output .= '</td></tr><tr>';
}
$i++;
}
$output .= '</table>';
return $output;
}
修改强> 现在,阅读代码更容易。此解决方案将所有内容放在一个变量中。你不需要数组。
答案 2 :(得分:0)
您可以使用ob_start()
和ob_get_clean()
将所有输出缓冲到变量中,然后输出该变量,如下所示:
ob_start();
print "Hello"; // Prints to buffer instead of screen
$out = ob_get_clean(); // Contains: Hello
echo $out; // Prints: Hello