为什么fetch_assoc()没有返回值?

时间:2016-08-22 03:25:50

标签: php mysqli

对于我的生活,我无法弄清楚为什么fetch_assoc()在这里返回false:

$username = $_POST['username'];
print("Username is " . $username . "<br>");

//Create query
$query = ("SELECT * FROM users WHERE username = '" . $username . "'");
print($query . "<br>");

//Run query
if (!$result = $db2 -> query($query)) {
    print("Query failed!");
}

if (!$user = new LG_User($result))
    print("Failed to create user!<br>");

while($row = $result -> fetch_assoc()) {
    $rows[] = $row;
}
var_dump($rows);
print("User is " . $user -> first_name . "<br>");

查询成功并创建了新用户对象,因为最后一行代码正确打印$ user-&gt; first_name。我正在使用相同的代码块来填充另一个页面上的$ rows数组,它正在运行。我在这做错了什么?如果我尝试使用

while($row = mysqli_fetch_assoc($result)) { $rows[] = $row; }

而不是

while($row = $result -> fetch_assoc()) { $rows[] = $row; }

它仍然不起作用。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您还没有显示LG_User构造函数的代码,但如果它从数据库中填入$user,则必须调用fetch函数本身。因此,当它返回时,结果的所有行都已被提取,并且没有任何东西可供您的循环读取。

您可以使用data_seek方法返回结果集的开头。

if (!$user = new LG_User($result))
    print("Failed to create user!<br>");
$result->data_seek(0);
while($row = $result -> fetch_assoc()) {
    $rows[] = $row;
}
var_dump($rows);