php - 需要根据登录的用户名计算列中的行数

标签 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。

如何获得正确的计数?

最佳答案

首先,就像每个看到 mysql_query 的人所说的那样,使用 PDO。然而,出于学习的目的,mysql_query 很好,但在生产服务器上完全 Not Acceptable 。主要是因为 mysql_query 非常不安全。它很容易出现诸如 SQL 注入(inject)之类的问题,这些问题可能会真正搞乱服务器,甚至给黑客提供访问权限。一旦您熟悉了 PHP 和 MySQL,请阅读有关 sql 注入(inject)和保护代码的内容。

回到真正的问题,您没有看到任何内容,因为您的选择查询完全不正常。 让我们来分解一下。我只是缩进了您的查询,以便我们可以详细讨论它。

SELECT 
from login_logs 
WHERE username = '".$_SESSION['user']['id'] ."username"

此查询存在几个问题。

  1. 您没有定义要选择的内容。 SELECT * 将返回每一列。但是,如果您只是进行计数而不关心检索数据,则可以使用索引列,例如 id 字段SELECT id。这提高了性能。也许你以后想读一些东西。
  2. 通过向其附加 "username",您的 where 条件几乎变得毫无用处。假设我是登录用户。我的用户名是 khuderm,因此 $_SESSION['user']['id'] 将返回 khuderm。因此,如果您用我的用户名替换该变量,它就会变成 WHERE username = 'khudermusername,而它应该只是寻找 khuderm。因此删除它可以部分解决问题。此外,您还缺少围绕用户名值的结束引号。因此,您不应将文字 "username" 附加到实际登录用户的用户名中,而应该附加 "'" 来结束开头的引用 WHERE 用户名 = '"

如果您能按照这些步骤操作,您应该能够解决您的问题。在 PHP 中调试 MySQL 查询的一个简单方法是回显它以获得带有变量和填充的最终查询。因此,在代码中的任何位置,回显 "SELECT from login_logs WHERE username = '".$_SESSION['user ']['id'] ."username" 将准确显示发送到数据库进行查询的内容。一旦你有了这个,在 phpmyadmin 或工作台或任何你用来查看数据库的东西中运行 echo 的结果,它应该告诉你查询出了什么问题。

不要忘记阅读 SQL 注入(inject)、PDO 和准备好的语句。希望这是一次富有洞察力和快乐的编码!

关于php - 需要根据登录的用户名计算列中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40795730/

相关文章:

php - 无法使用 Jquery 获取 JSON 值

java - 使用准备好的语句查询列表 (JDBC)

php - 修改 PHAR 文件

PHP客户端Web socket发送消息

php - Wordpress - 按字母顺序对包含数字和字母的帖子进行排序

MySQL - 从 2 个表中选择结果中的几列应基于条件语句

php - 视觉 Composer 在哪里存储链接?

php - 将行收集到 1 行并添加列

Mysql: my.cnf 修改不生效

mysql - 将csv文件导入mysql : Incorrect decimal value: '"0. 5'