2011-02-25 58 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"; 
}