视图工作正常,但在php中调用时返回0行

时间:2015-11-01 14:34:22

标签: php mysqli view

我创建了以下视图(选择上一个活跃用户的列表):

SELECT U.login, U.name, U.surname
FROM sessions S LEFT JOIN user U 
ON S.id_user = U.id_user 
WHERE U.id_user != 0 AND UNIX_TIMESTAMP()-S.set_time < 300
ORDER BY S.set_time DESC

SELECT * FROM vonline;给了我(我在phpmyadmin中称呼它):

login   name    surname
admin   Chuck   Norris
user2   John    Cena

我想在php中获得相同的输出:

if ($stmt = $mysqli->prepare("SELECT * FROM vonline")) {
    $stmt->execute();

    $result = $stmt->get_result();
    echo "Online users: $stmt->num_rows"; // This shows "0"
    while ($row = $result->fetch_array(MYSQLI_NUM)) {
        echo "Login: $row[1] Name: $row[1] Surname: $row[2]";
    }

} else {
    echo "Select Error";
}

为什么没有结果,num_rows返回0。

上面的代码非常适合从其他表中选择数据,但不适用于此表。

1 个答案:

答案 0 :(得分:1)

<击> 首先,您将代码传递给字符串文字,而不是可执行文件。

echo "Online users: $stmt->num_rows"; // This shows "0"

那应该是

echo "Online users: " . $stmt->num_rows;

并使用连接。

手册中的示例:

if ($result = $mysqli->query("SELECT Code, Name FROM Country ORDER BY Name")) {

    /* determine number of rows result set */
    $row_cnt = $result->num_rows;

    printf("Result set has %d rows.\n", $row_cnt);

    /* close result set */
    $result->close();
}

但是,get_result()可能无法供您使用。

在堆栈上查阅此Q&amp; A:

另外,请确保使用相同的MySQL API作为查询进行连接。

检查数据库和查询的错误:

修改

如果您的查询中存在错误,这对您没有帮助:

else {
    echo "Select Error";
}

$stmt->execute();更改为

if(!$stmt->execute()){
    trigger_error("there was an error....".$mysqli->error, E_USER_WARNING);
    }

或使用

echo("Error description: " . mysqli_error($mysqli)); 

else

另外,请确保选择了正确的“数据库”。