尝试从 mySQL 数据库构建一个简单的数据网格。
我用来连接的数据库类将结果集作为对象返回。我想克隆这个对象,这样我就可以使用 getNext() 方法获取表的标题,而无需向前移动指针以删除返回的第一行。我希望这像克隆结果集一样简单,这样我现在就有了 2 个相同的对象。然后返回一个对象中的 header ,同时保持另一个对象不变。
然而事实证明,这比我想象的要难。也许我没有正确使用克隆所以如果你能帮忙请告诉我我做错了什么。
代码如下:
function gethtmlTable($database, $table)
{
$db = new DB_Connection();
$sql = "SELECT * FROM $table;";
$result = $db->query($sql,$database);
$tabelheader = clone $result;
$tablerows = clone $result;
if (!$result) die($db->getError());
if ($result->getNumRows() == 0) die('No Results');
$count = $tabelheader->getNumRows();
$html = "<table><th>Select</th>";
// echo "<pre>".var_dump($result)."</pre>";
foreach($tabelheader->getNext() as $k => $v){
$html .="<th>".$k."</th>";
}
while($count > 0){
$row = $tablerows->getNext();
$html .= "<tr>";
$html .= "<td><input type='checkbox' id='checkbox".$count."' name=checkbox".$count." class ='styled' value='checked'></td>";
foreach($row as $k => $v){
$html .="<td>".$v."</td>";
}
//foreach($result->getNext() as $k => $v){
// $html .="<td>".$v."</td>";
//}
$html .="</tr>";
$count--;
}
$html .="</table>";
echo $html;
}
当我运行这个函数时,我得到一个带有标题和选择框的表格,但第一行总是丢失。 :(
最佳答案
与其说是直接答案,不如说是解决方案,但您不需要克隆您的对象。相反,您可以稍微更改 while
循环并仅使用查询中的 $result
:
do
{
// do the stuff you are doing now except for fetching a new row
// at the end:
$count--;
$row = $result->getNext();
}
while ($count > 0)
关于php clone 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12463820/