PHP-有效地增加变量

PHP-有效地增加变量,php,mysql,arrays,pdo,Php,Mysql,Arrays,Pdo,Im使用登录用户的功能,当用户登录但由于未发送验证码、验证码失败或登录失败而失败时,将为其提供IPTry。当他们达到5次尝试时,登录页面会被阻止大约1小时。我有一个函数可以更新MySQL列,以增加try count和last try date。但从PHP的文档来看,它指出: 注意:递增/递减运算符仅影响数字和 串。数组、对象和资源不受影响 我的函数从数据库获取try计数,然后尝试更新它。由于PDO的工作方式,我获取Try计数的SQL结果默认为数组。那么,如何有效地增加数组 我想做一个foreac

Im使用登录用户的功能,当用户登录但由于未发送验证码、验证码失败或登录失败而失败时,将为其提供IP
Try
。当他们达到5次尝试时,登录页面会被阻止大约1小时。我有一个函数可以更新MySQL列,以增加try count和last try date。但从PHP的文档来看,它指出:

注意:递增/递减运算符仅影响数字和 串。数组、对象和资源不受影响

我的函数从数据库获取try计数,然后尝试更新它。由于PDO的工作方式,我获取Try计数的SQL结果默认为数组。那么,如何有效地增加数组

我想做一个foreach条件,并使用
=
操作符将其保存到字符串中,然后从中递增。但这真的是最有效的方法吗

多谢各位


注:我没有展示任何示例代码e.t.c,因为这个问题很简单。我在这里到处搜索,找不到正确的答案。

您可以在更新查询中直接增加它。如果要添加一个try,只需执行以下操作:

UPDATE `tries` SET `tries` = `tries` + 1 WHERE `ip` = '127.0.0.1';

只需将IP替换为实际IP。

您可以在更新查询中直接增加它。如果要添加一个try,只需执行以下操作:

UPDATE `tries` SET `tries` = `tries` + 1 WHERE `ip` = '127.0.0.1';

只需将IP替换为实际IP。

要理解问题的错误原因,您必须理解数组是什么

数组只是一个包含其他变量的“包”。所以,你的问题听起来像是“我怎么能用口袋买两杯啤酒?”。问题是,你不能用口袋付钱。你必须从口袋里掏出现金,然后使用这些现金

数组的情况也完全一样:您必须从数组中提取返回的数据,然后可以自由地对其内容执行任何操作。记住,在里面的东西上,而不是在袋子上

但要获得有效的解决方案,请选择另一个答案,它以正确的方式解决了初始问题—根本不需要选择任何阵列

还有一个旁注

由于PDO的工作方式,用于获取Try计数的MySQL结果在默认情况下是一个数组


事实上,PDO可以以许多不同的方式工作。例如,它可以完全返回标量值

要理解为什么你的问题是错误的,你必须理解数组是什么

数组只是一个包含其他变量的“包”。所以,你的问题听起来像是“我怎么能用口袋买两杯啤酒?”。问题是,你不能用口袋付钱。你必须从口袋里掏出现金,然后使用这些现金

数组的情况也完全一样:您必须从数组中提取返回的数据,然后可以自由地对其内容执行任何操作。记住,在里面的东西上,而不是在袋子上

但要获得有效的解决方案,请选择另一个答案,它以正确的方式解决了初始问题—根本不需要选择任何阵列

还有一个旁注

由于PDO的工作方式,用于获取Try计数的MySQL结果在默认情况下是一个数组

事实上,PDO可以以许多不同的方式工作。例如,它可以完全返回标量值

只想补充一下

对于不正确的登录尝试,您应该使用单独的表。造成这种情况的原因有很多,但其中一个重要原因是,任何攻击都有可能在尝试时轮换用户名,而不仅仅是密码

有一个单独的表记录所有不正确的登录,可以让您在xx时间内更轻松地查询大量不正确的登录。附加到用户的不正确登录限制了您检测来自脚本源的DoS和暴力攻击的能力,因为您只能查看尝试使用的用户名(如果该用户名确实存在)

但是,您可以将表中的一个字段与用户ID关联,这样您就可以独立跟踪用户,然后在成功登录时,可以删除与该用户相关的记录

给你一个有效的例子。我已经将以下功能内置到我每天工作的商业Symfony项目中

表格示例

userID    --- foreign key (not mandatory)
IP        --- mandatory
timestamp --- mandatory
我们这样查询数据:

  • 针对特定子域的总体失败尝试(我们在使用同一系统时使用了许多尝试)
    • 这个系统是在学校使用的,所以我们必须迎合淘气的学生
  • 在最后一分钟内的所有失败尝试
    • 系统根据基值x数量随机休眠一段时间。(这是一种尝试让脚本攻击失败的黑客方式)
  • 特定用户的总尝试次数
    • 与你的例子类似。。与预配置的金额进行比较,然后相应地警告/禁用用户。如果阻止,则向帮助台团队发送电子邮件
这绝不是一个建议列表,也不是一个应该做什么的例子。。这只是我们根据具体情况决定的

关键是,如果没有一个单独的表格,这将不可能实现

对于不正确的登录尝试,您应该使用单独的表。造成这种情况的原因有很多,但其中一个重要原因是,任何攻击都有可能在尝试时轮换用户名,而不仅仅是密码

有一个单独的表记录所有不正确的登录,可以让您在xx时间内更轻松地查询大量不正确的登录。附加到用户的不正确登录限制了您检测来自脚本源的DoS和暴力攻击的能力,因为您只能查看尝试使用的用户名(如果该用户名确实存在)

但是,您可以将表中的一个字段与用户ID关联,这样您就可以独立跟踪用户,然后在成功登录时跟踪相关记录