php - 防止重复输入

标签 php mysql database

基本上,它会查找文件夹中的 mp3 文件,如果 number 不存在,则将插入到 mysql 数据库中。

问题是 INSERT (mysql) 已插入超过 1 次,但 member_idmember_id 具有相同的 number。这不应该发生。

4 名员工正在执行此脚本。造成这种情况的原因以及如何解决?

if ($handle = opendir($audioPath)) {
    while (false !== ($entry = readdir($handle))) {
        $file = pathinfo($entry);
        if ($entry != "." && $entry != ".." && !is_dir($audioPath . "/" . $entry) && $file['extension'] == 'mp3') {
            $number = $file['filename'];
            $SQL = "SELECT mobile, status, member_id, count(*) as Total from result WHERE number = :number";
            $query = $this->db->prepare($SQL);
            $query->bindValue(":number", $number);
            $query->execute();

            $row = $query->fetch(PDO::FETCH_ASSOC);

            // Check if number is exist in the table
            if ($row['Total'] == 0) {
                $SQL = "INSERT INTO result (number, status, status_date, member_id) VALUES ('$number', 'pending', now(), '$memberId')";
                $queryInsert = $this->db->prepare($SQL);
                $queryInsert->execute();
                break;
            } 
        }
    }
}

break之后,它通过媒体播放器插件播放mp3。

最佳答案

您可能遇到了两个人同时执行脚本的竞争情况。当执行选择时,该条目不存在。

解决这个问题的最佳方法是在 MySQL 中的数字字段上添加 UNIQUE 约束。这将确保插入时条件匹配。查询将失败,因此您需要处理该错误。

关于php - 防止重复输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11503697/

相关文章:

mysql - 在 My SQL 中,我希望用户限制删除表和删除数据库

php - 试图在 mysql 表中创建一个类似按钮的计数器,但是 UPDATE SET 不起作用

php - PDO动态表名设置

mysql - SQL如何从另一个表中求和并插入到另一个表中

sql - 用户特定的数据库记录

c# - Entity Framework 包含没有关系

php - 尝试从 mysql 中选择行然后在同一个选择中查看值是否存在

php - 在 php mvc 中使用 $_GET 发送变量

php - 使用 PHP include 时改变 CSS sprite 导航栏的状态

php - 自动测试,使用mysql进行测试