基本上,它会查找文件夹中的 mp3 文件,如果 number
不存在,则将插入
到 mysql 数据库中。
问题是 INSERT
(mysql) 已插入超过 1 次,但 member_id
的 member_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/