如何从PHP中的值对象获取数据?

时间:2011-02-25 22:33:23

标签: php oop

所以我从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++;
    }
?>

3 个答案:

答案 0 :(得分:1)

你有

$users[] = userVO;

这应该是

$users[] = $match;

这是您放置新userVO对象的变量。

您还应该在创建对象的地方使用括号

$match = new userVO();

答案 1 :(得分:0)

我看到一件看起来不正确的事情就是这一行在while循环中:$users[] = userVO;,我认为应该是$users[] = $match;

然后你可以在$ user的数组上使用foreach()循环而不是另一个循环。

我会写代码的最后一部分,如:

$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"]);
}

答案 2 :(得分:0)

嗯,我可以马上看到一些问题:

  1. $ users [] = userVO; 你没有在数组中添加$ match,你要添加userVO,这是类的名称,而不是保存类实例的变量。

  2. 您需要为此创建一个类吗?除非你打算用这些做很多繁重的工作,否则你可能会逃脱多维数组... mysql_fetch_assoc()非常适合这一点,因为它创建了一个表行的关联数组。我所做的通常是:

  3. 
    $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"; 
    }