我需要根据与
中记录的用户名相等的行,从数据库中的列开始计算$this->setParams('username', $users->getInfo($_SESSION['user']['id'], 'username'));
我需要它来计算在该表中重复用户名的次数。
<?php echo number_format(mysql_num_rows(mysql_query("SELECT from login_logs WHERE username = '".$_SESSION['user']['id'] ."username"))); ?>
即使我在数据库中看到4个值,它也会变为0。
如何获得正确的计数?
答案 0 :(得分:0)
您正在寻找SELECT COUNT(username) FROM logins_logs WHERE username = "your username"
但您应该使用PDO
并准备查询而不是mysql_query
。
示例:
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'',
);
$dsn= 'mysql:host=your_host;dbname=your_db';
$pdo = new PDO($dsn, 'root', 'root_password', $options);
$stmt = $pdo->prepare('SELECT COUNT(username) FROM logins_logs WHERE username = :username');
$stmt->bindParam(':username', $users->getInfo($_SESSION['user']['id'], 'username'));
$stmt->execute();
$result = $stmt->fetch();
echo $result['COUNT(username)'];
答案 1 :(得分:0)
首先,与所有看到mysql_query
的人一样,使用PDO。但是,出于学习目的,mysql_query
很好,但在生产服务器上完全不可接受。主要是因为mysql_query
非常不安全。像sql注入这样的东西很容易弄乱服务器,甚至可以访问黑客。一旦熟悉了PHP和MySQL,请阅读sql注入并保护代码。
回到真正的问题,你没有看到任何东西,因为你的选择查询完全没有问题。 让我们分解吧。我只是缩进了你的查询,所以我们可以详细讨论它。
SELECT
from login_logs
WHERE username = '".$_SESSION['user']['id'] ."username"
此查询存在几个问题。
SELECT *
将返回每一列。但是,如果您只是在计算并且不关心检索数据,则可以使用索引列,例如id字段SELECT id
。这提高了性能。也许你想稍后阅读的内容。"username"
添加khuderm
,您的状况几乎无用。让我们说我是登录用户。我的用户名为$_SESSION['user']['id']
,因此khuderm
将返回WHERE username = 'khudermusername
。因此,如果您使用我的用户名替换该变量,那么它应该只是在寻找khuderm
时变为"username"
。因此删除它将部分解决问题。此外,您缺少围绕用户名值的结束报价。因此,您应该在"'"
WHERE username = '"
来关闭该引号,而不是将字面词"SELECT from login_logs WHERE username = '".$_SESSION['user']['id'] ."username"
附加到实际登录用户的用户名中。
醇>
如果您可以按照这些步骤操作,则应该可以解决问题。在PHP中调试MySQL查询的一种简单方法是回显它以获得带有变量的最终查询并填写。因此,在代码的任何地方,回显$Select = "SELECT * FROM Messages ORDER BY ID DESC LIMIT 10";
$Result = $Connect->query($Select);
if (mysqli_num_rows($Result) > 0) {
while($Row = mysqli_fetch_assoc($Result)) {
echo "ID " . $Row["ID"] . " MSG " . $Row["Message"] . "<BR>";
}
}
将向您显示发送到数据库进行查询的确切内容。一旦你有了,在phpmyadmin或workbench中运行echo的结果或者你用来查看数据库的任何内容,它应该告诉你查询有什么问题。
不要忘记阅读sql注入,PDO和准备好的语句。希望这是一个富有洞察力和快乐的编码!