首页 > 解决方案 > 验证用户名和密码后在表中插入数据

问题描述

我有一个 php 文件,它检索 4 个参数:用户名、密码、条形码、计数。在检查用户名和密码是否相互匹配(来自另一个表“users”)后,我想插入用户名条形码并计入表“users_products”

所以代码会是这样的:

IF EXISTS(SELECT * FROM users WHERE username = $username AND password = $password) THEN INSERT INTO users_products (username, barcode, count) VALUES ('username','barcode','count');

这段代码不起作用,我猜这甚至不是真正的语法,但我认为每个人都明白我想要什么。感谢您的每一个帮助。

标签: mysqlinsertverification

解决方案


您可以从“用户”表中进行“选择”以填充users_products以强制用户存在以便查询返回结果。这被称为“插入...选择”语法,我认为是 sql 标准的一部分,并且在 mysql 中得到支持。

INSERT INTO users_products (username, barcode, count) 
SELECT username, 'barcode', 'count' 
FROM users 
WHERE username = 'username' AND password = 'password';

这会从中选择username列和一些静态定义的字段users,然后将数据(包括静态值)插入到users_products. 插入的行数将告诉您用户名和密码是否匹配。

'username', 'password', 'barcode', 和'count'假定是用户提供的,应该插入到准备好的语句中以避免 SQL 注入漏洞。

在现实世界中,将用户名和密码作为用户会话的主要标识符并不常见。通常在登录时提供用户名和密码或其他凭据,创建用户会话,将会话 cookie 返回给用户,该 cookie 用于引用服务器端的会话数据。使用数字 ID 列编写此类数据比使用字符串更有效,并且可以最大限度地减少通过网络发送的密码。当然,我这样说是不知道你实际上在做什么。

另一件事:不要以纯文本形式存储密码。而是存储密码的加密版本并将相同的密码应用于任何用户提供的密码以验证它。存储明文密码的数据库中的 SQL 漏洞是当今在线安全问题的重要组成部分。


推荐阅读