所以我从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++;
}
?>
答案 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)
$ users [] = userVO; 你没有在数组中添加$ match,你要添加userVO,这是类的名称,而不是保存类实例的变量。
您需要为此创建一个类吗?除非你打算用这些做很多繁重的工作,否则你可能会逃脱多维数组... 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";
}