Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防止重复条目_Php_Mysql_Database - Fatal编程技术网

Php 防止重复条目

Php 防止重复条目,php,mysql,database,Php,Mysql,Database,基本上,它会查看文件夹中的mp3文件,如果不存在number,则将insert插入mysql数据库 问题是INSERT(mysql)已被插入1次以上,但具有相同编号的不同成员id。这不应该发生 4名员工正在执行此脚本。是什么导致了这种情况,如何修复 if ($handle = opendir($audioPath)) { while (false !== ($entry = readdir($handle))) { $file = pathinfo($entry);

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

问题是
INSERT
(mysql)已被插入1次以上,但具有相同
编号的不同
成员id
。这不应该发生

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;
            } 
        }
    }
}

中断后
它将通过媒体播放器插件播放mp3。

您的第一次选择查询也将根据成员ID进行筛选

$SQL = "SELECT mobile, status, member_id, count(*) as Total from result WHERE number = :number AND member_id = :memberid";

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


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

啊,我明白了,我明白您的意思。我想我必须删除所有重复的
数字
,然后才能添加UNIQUE?它应该类似于INGORE INSERT
?是的,您需要在添加约束之前清理数据库。在您的情况下,INSERT IGNORE应该可以。