2014-04-29 151 views
1

我有我的功能的同時,循環由1獲得的值1,但我得到的只有1個值While循環不正常

while($row= mysqli_fetch_array($this->result)) 
    { 
     $image=$this->getEventDetails($row['Album_top'],'Event_image'); 
     $alert.="<div class=facBox> 
     <a href='gallery.php?id=$row[Id]' style=margin-top:0px;> 
     <img src='admin/customer/eventgallery/$image' alt=''> 
     </a> 
     <div class=clear></div> 
     <a href='gallery.php?id=$row[Id]' style=margin-top:0px;>$row[Album_title]</a> 
       </div>"; 
    } 

我從另一個函數獲取圖像名稱是

function getEventDetails($id,$fieldname) 
{ 
    $get="Select * from sarnaevent where Id='$id'"; 
    $this->result=mysqli_query($this->con,$get); 
    $row=mysqli_fetch_array($this->result); 
    return $row[$fieldname]; 
} 

現在我從循環中獲得唯一的值我的$警報只有一個facbox。如果我刪除此行

$this->getEventDetails($row['Album_top'],'Event_image'); 

它工作正常,但我想要這行獲取圖像的名稱。

回答

2

裏面getEventDetails(),你分配$this->result,覆蓋以前的內容$this->result。由於這發生在使用先前結果的while循環內,因此循環退出是因爲沒有其他結果要從內部檢索中檢索。

用戶一個不同的臨時結果TEH getEventDetails()方法內設定。

function getEventDetails($id,$fieldname) 
{ 
    $get="Select * from sarnaevent where Id='$id'"; 
    // Different variable name... 
    $temporary_result = mysqli_query($this->con,$get); 
    $row=mysqli_fetch_array($temporary_result); 
    return $row[$fieldname]; 
} 

一般情況下,我會質疑被存儲短暫結果資源爲對象的$this->result對於大多數用途的需要。在任何情況下,如果你在一個方法中使用這個方法,你可能最好只在方法中使用一個變量作用域,這個方法只在結果集被使用的生命週期中存在。

直接發送到$id查詢時請注意安全。雖然我懷疑它是一個整數變量,並且因此它不會破壞SQL,但最好養成使用prepare()/execute()來防止SQL注入的習慣。

最後一點值得注意的是:將字符串變量放入HTML標記時,請務必使用htmlspecialchars()來避免對HTML進行畸變。 (如果Id被稱爲是一個整數,沒有必要有)

"...<a href='gallery.php?id=$row[Id]' style=margin-top:0px;>" . htmlspecialchars($row['Album_title']) . "</a>..." 
+1

即使有了這個,你可能需要調用$ stmt-> store_result();以確保您從服務器拉取所有結果,或者第二個選擇命令可能會終止來自第一個命令的結果。或者那是我的經驗。因人而異。 – dboals

+0

讓我試試這個 – Vivek

+0

@dboals在準備好的陳述中,我認爲你是絕對正確的。對於對'mysqli_query()/ mysqli_fetch _ *()'的常規嵌套調用,'我不認爲這是必要的,但我可能弄錯了。 –

0

而不是使用mysqli_fetch_array()嘗試使用mysqli_fetch_assoc(請參閱:http://php.net/manual/en/mysqli-result.fetch-assoc.php);返回的數組將是關聯(鍵值對),其中鍵是列名。

+0

Nop它不會工作。它顯示了同樣的事情。當我把getEventDetails()的值比它創造的問題其他的工作。 – Vivek

+1

默認情況下,'mysqli_fetch_array()'同時返回數字鍵和關聯鍵,所以它們都存在。 –

+0

@MichaelBerkowski不知道,我一直都有一種誤解,認爲'mysqli_fetch_assoc'是獲得列名稱作爲關鍵字的關聯數組的唯一方法。乾杯! –

0

你吹你的原始查詢。

首先,你做了查詢,其結果分配給$this->result。然後你迭代這些結果。對於第一行,您立即進行新的查詢,用新結果覆蓋$this->result,然後嘗試繼續...但您剛剛使用事件詳細信息查詢中的單個結果替換了其餘結果,所以mysqli_fetch_array沒有找到任何結果。

解決方案:爲該結果使用單獨的變量。本地的應該沒問題,因爲你不在該功能之外使用它。您可能還需要使用單獨的連接;我不確定這一點。只需改變$this->resultgetEventDetails()就可以使用$eventResult之類的東西來代替。