2011-02-25 56 views
0

所以我從PHP數據庫中獲取數據。我打算比較從查詢中獲得的數據創建的每個對象的值。到現在爲止還挺好。如何從PHP中的值對象獲取數據?

當我嘗試從對象中檢索數據後,就會出現這個問題,一旦它們被創建,它就變成空的。

我不是PHP開發人員,所以我不知道我是否遵循適當的PHP邏輯。我習慣了JS,AS3和Java,所以PHP中的對象和值對象有點不同於我所知道的。

任何人都知道我如何檢索我的數據?

<?php 
    include("../config.php"); 

    class userVO 
    { 
     public $uid; 
     public $name; 
     public $email; 
     public $list; 
     public $num_list_items; 
     public $matches; 
     public $num_matches; 

     public function __construct() 
     { 
      $this->matches = array(); 
     } 
    } 

    mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error()); 
    mysql_select_db(DB_NAME) or die(mysql_error()); 

    $json_array = array(); 
    $result = mysql_query("..."); 

    $num_results = mysql_numrows($result); 
    mysql_close(); 

    $users = array(); 
    $i = 0; 
    while($i < $num_results) 
    { 
     $match = new userVO; 
     $match->uid = mysql_result($result, $i, "uid"); 
     $match->name = mysql_result($result, $i, "name"); 
     $match->email = mysql_result($result, $i, "email"); 
     $users[] = userVO; 
     $i++; 
    } 

    $num_users = count($users); 
    echo "num users: " . $num_users . "<br>"; 

    $i = 0; 
    while($i < $num_users) 
    { 
     echo "--- i: " . $i . " ---<br>"; 
     $current_user = $users[$i]; 

     echo "users[" . $i . "]: " . $users[$i] . "<br>"; 
     echo "users[" . $i . "]->name: " . $users[$i]->name . "<br>"; 
     echo "current user: " . $current_user . "<br>"; 
     echo "current user name: " . $current_user->name . "<br>"; 

     $i++; 
    } 
?> 
+2

也許你的意思'$用戶[] = $匹配;'? – 2011-02-25 22:36:37

回答

1

你有

$users[] = userVO;

這應該是

$users[] = $match;

這是可變的,你把新userVO對象英寸

你也應該有圓括號,你在哪裏創建對象

$match = new userVO();

+0

@ircmaxell - 你在哪裏看到在任何地方定義的'user'類? – 2011-02-25 22:37:43

+0

@Matt:我沒有,但我認爲這就是'$ match = new userVO;'應該是什麼意思...... – ircmaxell 2011-02-25 22:38:54

+0

@ircmaxell - 他表明他有上面定義的類'userVO',所以我不用他認爲他稱之爲「新用戶VO」是個錯誤。 – 2011-02-25 23:35:37

0

有一兩件事,我看到的是不看的權利是這條線在這裏的while循環:$users[] = userVO;,我認爲應該是$users[] = $match;

那麼您還可以使用foreach()在$ user的數組上循環而不是在下面的循環中循環。

我會寫這樣的代碼的最後部分:

$result = mysql_query("..."); 

$users = array(); 

while($row = mysql_fetch_assoc($result)) 
{ 
    $match = new userVO(); 
    $match->uid = $row["uid"]; 
    $match->name = $row["name"]; 
    $match->email = $row["email"]; 
    $users[] = $match; 
} 
mysql_close(); 

$num_users = count($users); 
echo "num users: " . $num_users . "<br>"; 

foreach($users as $key => $user) 
{ 
    echo "--- key: " . $key . " ---<br>"; 
    echo "users[" . $key . "]: " . $user . "<br>"; 
    echo "users[" . $key . "]->name: " . $user->name . "<br>"; 
    echo "current user: " . $user . "<br>"; 
    echo "current user name: " . $user->name . "<br>"; 
} 


?> 

哦,也是,有位更改了__construct功能,你可以這樣做的:

public function __construct($uid, $name, $email) 
{ 
    $this->matches = array(); 
    $this->uid = $uid; 
    $this->name = $name; 
    $this->email = $email; 
} 

,然後你可以這樣做:

while($row = mysql_fetch_assoc($result)) 
{ 
    $users[] = new userVO($row["uid"],$row["name"],$row["email"]); 
} 
+0

感謝提示,但我沒有問題,我保存檢索我的數據本身的部分。你的第一段確實是我沒有看到它的明顯錯誤。謝謝! – jansensan 2011-02-27 12:04:47

0

嗯,我可以馬上看到幾個問題:

  1. $ users [] = userVO; 您並未將$ match添加到數組中,而是添加userVO,它是類的名稱,而不是保存類實例的變量。

  2. 你需要爲此創建一個類嗎?除非你要用這些工作做很多繁重的工作,否則你可能會逃避多維數組...... mysql_fetch_assoc()對此很好,因爲它創建了錶行的關聯數組。我通常做的是一樣的東西:

 

$sql = "SELECT * FROM table WHERE foo='bar'"; 
$result = mysql_query($sql); 

if (!$result) { 
    echo 'Could not run query: ' . mysql_error(); 
    echo 'Query was: ' . $sql; 
    exit; 
} 

$stuff = array(); 
if (mysql_num_rows($result) > 0) { 
    while ($row = mysql_fetch_assoc($result)) { 
     $stuff[] = $row; 
    } 
} 
 

然後,一旦我做了整理作品,我下面的使用它:

 

foreach($stuff as $row){ 
    $uid = $row['uid']; 
    $name = $row['name']; 
    $email = $row['email']; 

    echo "$uid $name $email"; 
}