【发布时间】:2011-04-08 22:59:14
【问题描述】:
我目前正在开发一个学生管理系统,用于跟踪学生和他们上课的学期。我有一个功能允许用户通过Excel 文件导入数据。
在整个过程中,我验证了数据的有效性(无效字符、电子邮件等),并检查了数据库中的重复项,以查看学生是否存在和/或是否已经上课。为了实现验证,我必须为每个学生运行两个查询,如果我只需要一次管理 250 名学生(每个查询平均运行 0.004 秒),这还不错。当名单接近 500 名学生时,问题开始累积。整个验证过程大约需要 2.5 秒。
在我的书中,如果这仅发生一次就没有问题,但是每次通过顺序导航加载数据时都会发生这种情况,因为我允许用户在导入之前查看数据(每页显示 30 个),他们可以对其进行编辑.
绕过这个瓶颈的最佳方法是什么,或者我应该让它成为并警告用户?
达到最大可扩展性的最佳方法是什么?
编辑:
在我的申请中,我将学生和他们就读的学期分开。 我运行的第一个查询是检查学生是否存在。如果是新学生,它将创建一个新学生,否则,更新学生的数据。
第二个查询用于检查学生是否已经参加了我尝试添加他的学期。如果他已经参加,他将被排除在输入之外。
验证过程如下:
Trim white space
Strip html tags
check email validity
check if the semester for which I try to register him is a valid semester (ie : w11 for winter 2011)
check if the province is a valid canadian province
// first query
check for birthday, first and last name in the database
// second query
check if the student is already registred for the semester in the database
前三项检查必须为真才能成为有效输入
如果第一个查询返回true,学生存在,必须更新数据,如果返回false,它是一个新学生,必须创建一个新学生。
如果第二个查询返回真,学生不必再次注册,因为他已经在上学期,如果返回假,学生必须注册所需的学期
【问题讨论】:
-
你能提供更多关于你需要运行什么样的查询的信息吗?示例代码会有所帮助。
-
我无法理解为什么有 2 个查询?您是否使用查询验证您的数据?如果不是,那为什么是第二个查询?
-
为什么要使用查询来验证是否应该使用正则表达式或 php 中的东西来验证?
-
@mcgrailm 查询是检查重复数据,而不是数据格式。
-
别忘了输入数据可能是非英语语言,所以你必须使用多字节函数来处理输入数据(php.net/manual/en/ref.mbstring.php)。
标签: php mysql validation