0

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

问题是INSERT(mysql) 已插入超过 1 次,但不同member_id的 's 相同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 之后。

4

2 回答 2

2

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

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

于 2012-07-16T11:57:03.080 回答
0

您的第一个选择查询也应该过滤成员 ID...

$SQL = "SELECT mobile, status, member_id, count(*) as Total from result WHERE number = :number AND member_id = :memberid";
于 2012-07-16T11:56:34.970 回答