函数从数据库中获取数据

时间:2016-02-02 15:17:56

标签: php mysql

我想构建一个从数据库中获取数据并返回它的函数,然后我想把这个函数调用一段时间。

我执行此功能,但在我暂时调用它时给我一些问题:

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;
}

有人可以帮忙吗?

2 个答案:

答案 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)

您的代码中存在两个问题:

  1. getAllUsers()方法仅返回查询的第一条记录,而不是全部;
  2. 即使你解决了这个问题,你的while循环 - 如另一个答案中所述 - 永远不会结束,因为无限地检索结果。
  3. 要解决此问题,您必须以这种方式更改代码:

    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;
    }
    

    第一个解决方案更加一致和漂亮,第二个解决方案可以在非常查询返回的大量行上更具表现性