我正在尝试显示过去10分钟内在我的网站上处于活动状态的用户数量,但是我遇到查询语法问题并收到错误“mysql_num_rows()期望参数1为资源,给定布尔值......“
<?php
$dt = date('Y-m-d h:i:s');
$checktime = $dt - 600;
$query = "SELECT * FROM users WHERE DATE(STR_TO_DATE(lastactive)) BETWEEN '$checktime' AND '$dt'";
$result = mysql_query($query);
$num = mysql_num_rows($result);
echo $num;
?>
真的需要帮助来解决这个问题,请不要评论简单的MySQL函数的弃用,我知道它。
答案 0 :(得分:4)
此时,使用mysql_
功能与您的数据库进行交互将允许人们轻松破解您的网站。这就是原因,我们建议您使用mysqli_
或PDO
。我是PDO
的粉丝所以,我将提供一个简单的示例,它将完成这项工作,并且保证您的网站免受mysql
注入攻击。
// last seen time
$time = 10:00:00;
try {
# First let us connect to our database
$conn = new \PDO("mysql:host=localhost;dbname=xx;charset=utf8mb4", "xx", "xx", []);
} catch(\PDOException $e){
echo "Error connecting to mysql: ". $e->getMessage();
}
$users_online = $conn->prepare("
SELECT id, username, online_time FROM users
WHERE TIMEDIFF(CURTIME(), online_time) < TIME (?)
ORDER BY online_time"
);
$users_online->execute(array($time));
foreach($users_online as $user){
echo "<p> User: {$user['username']} is online </p>";
}
答案 1 :(得分:3)
永远不要做你正在做的事情!
当MySQL可以为您完成所有操作并且只返回一个数字时,您正在获取大量数据并计算行数...这就是您所需要的!像这样:
SELECT COUNT(*) FROM `users` WHERE `lastactive` >= DATE_SUB(NOW(), INTERVAL 10 MINUTE);
^假设lastactive
是DATETIME
字段。使用INTERVAL
部分很容易。可以是:
<强>:)强>
答案 2 :(得分:0)