我想构建一个从数据库中获取数据并返回它的函数,然后我想把这个函数调用一段时间。
我执行此功能,但在我暂时调用它时给我一些问题:
public function getAllUsers() {
// if database connection opened
if ($this->databaseConnection()) {
// database query, getting all the info of the selected user
$query = $this->db_connection->prepare('SELECT * FROM users');
$query->execute();
// get result row (as an object)
return $query->fetchObject();
} else {
return false;
}
}
这就是我想要调用函数的方式:
while($row = $users->getAllUsers()) {
echo "User name: ".$row->user_name."<br>User ID: ".$row->user_id;
}
有人可以帮忙吗?
答案 0 :(得分:0)
您尝试做的是获取所有用户,然后遍历所有用户并回复有关他们的一些信息。您的函数getAllUsers()
使用您的SQL查询检索所有用户。但是,while循环会多次执行您的函数,每次都会获取整个用户列表。
相反,执行一次函数,从中获取结果,然后遍历结果。
$userlist = $users->getAllUsers();
while($row = $userlist->getRow()) { //Im not sure what the function is to get a row in the framework you're using.
echo "User name: ".$row->user_name."<br>User ID: ".$row->user_id;
}
Look up how a while loop works
每次迭代都会运行while循环($row = $users->getAllUsers()
)的谓词,因此调用谓词中的函数也会在每次迭代时执行该函数。
答案 1 :(得分:0)
您的代码中存在两个问题:
getAllUsers()
方法仅返回查询的第一条记录,而不是全部; while
循环 - 如另一个答案中所述 - 永远不会结束,因为无限地检索结果。要解决此问题,您必须以这种方式更改代码:
public function getAllUsers() {
(...)
// get all rows (as an object)
return $query->fetchAll( PDO::FETCH_OBJ );
(...)
}
然后执行foreach
循环而不是while
循环:
foreach( $users->getAllUsers() as $row ) {
(...)
}
替代方法:您可以返回$query
对象并从方法中获取它:
public function getAllUsers() {
(...)
// return the query:
return $query;
(...)
}
$rows = $users->getAllUsers();
while( $row = $rows->fetchObject() ) {
echo "User name: ".$row->user_name."<br>User ID: ".$row->user_id;
}
第一个解决方案更加一致和漂亮,第二个解决方案可以在非常查询返回的大量行上更具表现性