我有6门课程的注册申请。该程序将首先检查重复注册用户。那些需要检查的用户来自去年。如果用户注册了一门课程,他们就不能注册任何其他课程。
---firstroundregisted table structure---
id|englishname |idcard |
1 |CHAN SIU MING|A1234 |
2 |TAK HO KANG |Z4123 |
---Contain >5000 last year registered users records for the 6 courses---PHP中的sql如下所示。
SELECT * FROM firstroundregisted
WHERE englishname='".$_POST['studentname']."'
AND idcard='".$_POST['idcard']."'
LIMIT 1;这是查找用户注册与否的最快方法吗?
其他:
我在这里问了一个问题:如何提高最大值_使用_联系?,一些绅士建议我优化sql,所以我开始一个新的问题,重点放在优化上。谢谢你们的帮助。
发布于 2020-11-13 15:13:04
这是查找用户注册与否的最快方法吗?
够近的了。
如果表是在englishname (最好也是idcard )上索引的,那么是的。实际上,如果这两个键唯一地标识每一行,那么它们实际上应该是表的主键。
如果表没有被索引,那么它确实应该是。
但是..。
不要在生产代码中使用"select *“。
永远不要在动态生成的SQL中直接使用原始的用户提供的值。
这样做是最快的方法之一,以获得您的表,可能,您的整个数据库良好和真正的混乱。这个问题被称为<#>SQL注入攻击,您的代码对此非常开放。
强制性XKCD参考:小鲍比桌。
您最好的计划是使用准备好的/参数化语句,但如果失败,则必须“转义”用户的值,这样它们才能形成有效和安全的SQL。
https://dba.stackexchange.com/questions/279617
复制相似问题