我有这个小代码:
$user = Database::getInstance()->query("SELECT username FROM users");
if ($user->count()) {
foreach ($user as $users) {
echo $users->username;
}
}
var_dump($users);die();
这给了我一个错误:
Notice: Trying to get property 'username' of non-object in C:\xampp\htdocs\finaltask\test.php on line 8
array(2) { [0]=> object(stdClass)#5 (1) { ["username"]=> string(10) "reinisk157" } [1]=> object(stdClass)#6 (1) { ["username"]=> string(9) "reinisk22" } }
如果我理解正确,我试图从数组中检索对象,但是我不知道如何从数据库中获取该数据。如果您需要更多详细信息,请告诉我。
答案 0 :(得分:1)
这里存在一些范围和命名问题,可能会使您感到困惑。
foreach的范围
foreach($list as $item) {
// ... do something
}
echo $item;
循环遍历列表/数组时,循环的最后一项在循环之后仍然可用。这就是为什么转储看起来像它的原因,因为您正在转储错误的东西。
$userResult = Database::getInstance()->query("SELECT username FROM users");
if ($userResult->count()) {
foreach ($userResult as $user) {
echo $user->username;
}
}
var_dump($userResult);die();
答案 1 :(得分:1)
先使用$usersResult = $users->fetchAll(PDO::FETCH_OBJ);
,然后再使用foreach。
$users = Database::getInstance()->query("SELECT username FROM users");
$usersResult = $users->fetchAll(PDO::FETCH_OBJ);
if ($usersResult->count()) {
foreach ($usersResult as $user) {
echo $user->username;
}
}
var_dump($usersResult);
die();
注意:我在解析数据时将
$users
更改为$user
循环,因为这对于单个用户的数据更有意义。
希望这行得通!
答案 2 :(得分:0)
首先,从语义上讲,使用该查询可以获取用户,而不仅仅是一个用户。对于代码本身而言,这并不重要,但了解它很重要:)
$users = Database::getInstance()->query("SELECT username FROM users");
// I prefer is_null over count(), when a query returns 0 rows turns on null
if (!is_null($users)) {
foreach($users as $user){
//Try calling it this way
echo $user['username'];
}
}
答案 3 :(得分:0)
感谢所有答案,我也会尝试。我让它起作用的是:
echo $users[0]->username;