我创建了以下视图(选择上一个活跃用户的列表):
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。
上面的代码非常适合从其他表中选择数据,但不适用于此表。
答案 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();
}
将$stmt->num_rows
更改为$result->num_rows
,我认为您使用的是错误的变量。您需要在“结果”和get_result()
函数上使用变量。
但是,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
。
另外,请确保选择了正确的“数据库”。