2013-01-22 126 views
0

此代碼有什麼問題?我想返回一個數組並在調用者函數中使用它。從PHP函數返回數組

function my_subjects() 
     { 
      $all_my_teams=my_teams(); 
      $k=0; 
      $_subjects=array(); 
      while($team=mysql_fetch_assoc($all_my_teams)) 
      { 
       $q="SELECT $this->user_field FROM $team"; 
       $r=mysql_query($q); 

       while($i=mysql_fetch_assoc($r)) 
       { 
        $_subjects[k++]=$i; 
       } 
      }     

      return $_subjects; 
     } 

注意:函數my_teams()返回的值類似於通過all_my_teams變量使用的$ r變量。它包含所有團隊的名稱。

+2

什麼不起作用? –

+1

除了使用不推薦使用的'mysql_ *'函數,我看不出任何奇怪的東西。什麼不應該發生? –

+0

你爲什麼要運行兩個查詢?這應該作爲單個JOINed查詢來完成。 –

回答

0
while($i=mysql_fetch_assoc($r)) 
       { 
        $_subjects[k++]=$i; 
       } 

在這裏,您還必須提供$i的字段名稱。類似於

while($i=mysql_fetch_assoc($r)) 
       { 
        $_subjects[$k++]=$i["field_name"]; 
       } 

數組返回部分就好了。

編輯:您的變量k也缺少$符號。

+0

由於$ i只是一個關聯數組,因此不需要包含字段名稱。但是你確定'k'缺少$符號 - 這可能是導致問題的原因。閱讀他的代碼時我完全錯過了! –

0
$_subjects[$k++] = $i; 

應該是很好的,因爲你使用mysql_fetch_assoc()$i將包含結果集的關聯數組。

如果這是返回一個空數組(這是正確的問題?),你應該仔細檢查你的sql是否正確,並實際返回你期望的數據/數據。

編輯:像Hanky Panky提到的,'k'在你的代碼中缺少一個$符號 - 這很可能是你的問題 - PHP應該拋出一個解析錯誤,因此確保你啓用了error_reporting()

+0

你確定你的意思是'$ i ++'? – Sammitch

+0

哈哈,沒有。謝謝@Sammitch - 在我喝咖啡之前,我不應該做這些事情:p –

1
  1. 打開error_reporting查看您的代碼是否生成錯誤。
  2. 檢查您的查詢是否成功if(! $r=mysql_query($q)) { die(mysql_error()); }
  3. var_dump($_subjects);查看數據是否符合您的期望。
  4. 也許實際上告訴我們出了什麼問題?您剛剛發佈了一段代碼,並告訴我們「這行不通。」這不是非常顯示問題。
  5. $k是無關緊要的,只是使用$_subjects[]=$i;。 [會不會導致錯誤,只是更容易]
  6. 停止使用mysql_ *函數和你的代碼移植到PDO或MySQLi的:從參數化查詢
    • 效益,它可以幫助防止SQL注入。
    • 阻止每個人都在關於它的評論中開始一個不相關的論點。