mysql - 验证用户名和密码后在表中插入数据
问题描述
我有一个 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');
这段代码不起作用,我猜这甚至不是真正的语法,但我认为每个人都明白我想要什么。感谢您的每一个帮助。
解决方案
您可以从“用户”表中进行“选择”以填充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 漏洞是当今在线安全问题的重要组成部分。
推荐阅读
- javascript - 尝试使用 Angular 制作实时时钟
- ios - 如何在 WKWebView iOS 中进入全屏模式?
- powershell - 使用 Power shell 脚本捕获 SSAS 连接字符串和 SSAS 表格名称详细信息
- python - 确定通过 USB 连接的 Nikon d5300 相机的路径
- c++ - 跨 C/C++ 编译器将 FLT_MAX 转换为 unsigned char 时的不同结果
- jquery - 为什么数据表不显示从响应的 ajax 排序的数据?
- c++ - 如何确定嵌套循环的时间复杂度?
- rhel - 为什么 CDAP 不能在 RHEL 版本的 NodeJs 上运行?
- three.js - 如何使用 THREE.JS 向 3d 汽车模型添加一些平滑过渡?
- gnuplot - 在 gnu plot 中使用不同的线绘制不同的数据集