首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在循环中,查询会给出不同的结果吗?

问在循环中,查询会给出不同的结果吗?
EN

Stack Overflow用户
提问于 2013-05-28 23:56:53
回答 3查看 76关注 0票数 0

我们有一个上传工具,通过CSV上传用户。在这个循环中,我们使用MySql检查用户是否以这种方式存在:

代码语言:javascript
复制
SELECT id FROM user_table WHERE email = 'email@domain.com'

我们将此查询的结果保存在$sql_array中。

在那之后,我们做一个count($sql_array)。如果计数大于零,我们什么也不做。否则,我们将用户插入到user_table中。

现在,我们已经注意到的奇怪的事情是,在某些情况下,它插入的用户的电子邮件地址已经存在。

我们有一个函数,如果查询结果出错,它会给我们发送一封电子邮件。例如在超时或与MySQL的连接丢失的情况下。我们没有收到任何电子邮件,但仍然有这些重复的结果。有人知道这是怎么回事吗?

EN

回答 3

Stack Overflow用户

发布于 2013-05-29 00:01:19

确保电子邮件地址确实相同,并且在实际字符串之前或之后不包含任何零散的空格。电子邮件地址的大小写也可能不同,但我的第一个猜测是未修剪的字符串。

另一件需要注意的事情是查询的性能。执行select操作,将结果转换为数组,然后对该数组进行计数并不是最优的。更好的SELECT COUNT(*) FROM users_table WHERE email = '…' (在电子邮件上建立索引也有帮助)

票数 1
EN

Stack Overflow用户

发布于 2013-05-29 00:01:32

在以下情况下,您的查询可能无法匹配记录:

  • 数据库的排序规则区分大小写email@domain.com不等于确保电子邮件已裁剪并存储在已裁剪的数据库中。

重要更新:

如果您的脚本易受sql injection攻击,则一个简单的引号"'“就可能导致查询失败。例如,如果$email具有值

代码语言:javascript
复制
fdassdfsdf'sdfsfd@.com

将导致查询

代码语言:javascript
复制
SELECT id FROM user_table WHERE email = 'fdassdfsdf'sdfsfd@.com'

这将不会执行,因为它有错误的语法,您将得到0行作为结果,并且您的脚本将认为用户不存在,并将允许注册。

票数 1
EN

Stack Overflow用户

发布于 2013-05-29 00:02:03

根据数据在表中的保存方式,可能存在空格问题,从而导致误报

像这样的事情可能会有所帮助

代码语言:javascript
复制
$query = 'SELECT id FROM user_table WHERE email = "'.trim($emailFromCsv).'"';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16796462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档