mySQLデータベースから単純なデータグリッドを構築しようとしています。
接続に使用しているデータベースクラスは、結果セットをオブジェクトとして返します。このオブジェクトのクローンを作成して、getNext()メソッドを使用して、返された最初の行をドロップするためにポインターを前方に移動せずに、テーブルのヘッダーを取得できるようにします。結果セットのクローンを作成するだけで、これは単純であると思います。これにより、同一の2つのオブジェクトが作成されます。次に、一方のオブジェクトのヘッダーを返し、もう一方のオブジェクトはそのままにします。
しかし、これは私が思っていたよりも難しいことが証明されました。おそらく私はクローンを適切に使用していないので、助けていただければ、私が間違っていることを教えてください。
以下はコードです:
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;
}
この関数を実行すると、ヘッダーと選択ボックスを含むテーブルが返されますが、最初の行は常に欠落しています。:(