2012-09-17 99 views
1

試圖從MySQL數據庫中構建一個簡單的數據網格。php克隆不能如何工作

我用來連接的數據庫類將結果集作爲對象返回。我想克隆這個對象,這樣我就可以使用getNext()方法獲取表的標題,而無需向前移動指針以放下返回的第一行。我期望這很簡單,因爲克隆結果集使我現在有兩個相同的對象。然後在一個對象中返回標題,而另一個對象不變。

然而,我認爲這已經證明是困難的。也許我沒有正確使用克隆,所以如果你能幫助,請告訴我我做錯了什麼。

下面是代碼:

 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; 

      } 

當我運行這個功能,我回去用頭一張桌子和一個選擇框,但第一排總是缺。 :(

回答

0

超過一個直接的答案的解決方案,但你並不需要克隆的對象,而不是,你可以改變你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) 
+1

這個工作的解決方案,謝謝你的建議。我甚至沒有考慮過使用一種做法 - 而不是用克隆複雜化:) – TheSnooker

0

克隆的$結果對象並不意味着你可以從2個不同的數據源讀取。

它仍然是一個數據源底層,有一個光標!

所以這條線:

foreach($tabelheader->getNext() as $k => $v) { 
     $html .="<th>".$k."</th>"; 
    } 

居然會從獲取數據源的第一條記錄,並

while($count > 0) { 
    $row = $tablerows->getNext(); 
    ... 

將從第2行以及我未來再取!

0

閱讀的建議後,我意識到我是在複雜的:d

這裏是一個人在那裏,誰是試圖做同樣的

 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 = $result->getNumRows(); 
      $html = "<table><th>Select</th>"; 
      $row = $result->getNext(); 

      foreach($row as $k => $v){ 
        $html .="<th>".$k."</th>"; 
      } 

      do { 
       $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>"; 
       } 

       $count--;  
       $row = $result->getNext(); 
      } 
      while ($count > 0);