需要根据登录的用户名计算列中的一行

时间:2016-11-24 23:25:10

标签: php mysql sql count

我需要根据与

中记录的用户名相等的行,从数据库中的列开始计算
$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。

如何获得正确的计数?

2 个答案:

答案 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"

此查询存在几个问题。

  1. 您没有定义要选择的内容。 SELECT *将返回每一列。但是,如果您只是在计算并且不关心检索数据,则可以使用索引列,例如id字段SELECT id。这提高了性能。也许你想稍后阅读的内容。
  2. 通过向"username"添加khuderm,您的状况几乎无用。让我们说我是登录用户。我的用户名为$_SESSION['user']['id'],因此khuderm将返回WHERE username = 'khudermusername。因此,如果您使用我的用户名替换该变量,那么它应该只是在寻找khuderm时变为"username"。因此删除它将部分解决问题。此外,您缺少围绕用户名值的结束报价。因此,您应该在"'"
  3. 开头附加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和准备好的语句。希望这是一个富有洞察力和快乐的编码!