晚上好。
我怀疑是否包含在数据库中。一个常见示例是用户帐户,其中用户名必须是唯一的。
在以下逻辑中:
示例:
<?php
$username = $_POST['username'];
$query = "SELECT * FROM `user_tbl` WHERE `username` = '{$username}'";
$result = mysql_query($query);
if ( mysql_num_rows ( $result ) > 1 ) {
/* Username already exists */
echo 'Username already exists';
} else {
/* Username doesn't exist */
/* a certain time is elapsed after checking */
/* .. insert query */
}
我的问题是,在一个请求量很大的系统中,有可能在检查用户名是否已存在的时间和包含(如果用户名不存在)之间,另一个用户也可以这样做同时行动?
更新
我知道安全问题,使用此代码(复制和过去)来解释问题是关于两个用户同时做同样事情的可能性。关于唯一索引的问题,我知道它是如何工作的,也许我不清楚这个问题,只是看看是否有可能同时发生命令。&#34;谢谢你的回答。
答案 0 :(得分:1)
除了已经放置正确的评论之外,解决方法是使用交易&amp;一个独特的指数:
唯一索引保证值只能存在一次。
在您的情况下,索引可以是:
CREATE UNIQUE INDEX idx_nn_1 ON user_tbl(username);
这样用户只能存在一次。如果两个人同时插入相同的用户名,则其中一个插入将失败。你需要抓住并处理的失败。