如何避免使用 php 在 SQLite 表中添加冗余数据



我正在研究如下所示的 php 代码,其中列出了 $src_dir 中存在的所有 mp4 文件

$src_dir = ('\ABCD-ST-001Audio_Testpodcastincoming_folder'); 
$mp4_files = preg_grep('~.(mp4)$~', scandir($src_dir));
print_r(array_values($mp4_files));  // LineA

以下是从行#A获得的O/P

Array ( [0] => 36031P.mp4 [1] => hello.mp4 )

现在,我在 php 代码中使用以下脚本,以便在表中插入Podcast_Export这些 mp4 文件。

    foreach ($mp4_files as $value) {
        $db->exec(SELECT COUNT(*) FROM Podcast_Export WHERE House# = '".$value."' AND status = 'GO');
        $db->exec("INSERT INTO Podcast_Export ('House_number', 'Status') VALUES ('".$value."', 'Go')");    // Line B
    }

上面的脚本在表中添加了以下数据Podcast_Export

36031.mp4 Go
hello.mp4 Go

问题陈述:

我现在面临的问题是,当我刷新页面时,LineB 上的脚本再次运行,并且 $src_dir 中存在的 mp4 文件再次添加到表中Podcast_Export如下所示:

36031.mp4 Go
hello.mp4 Go
36031.mp4 Go
hello.mp4 Go

它应该以一种方式工作,一旦新文件出现在 $src_dir 中,那么它应该添加到Podcast_Export表中。假设新文件是 hxz210.mp4然后是表中Podcast_Export内容应该是:

36031.mp4  Go
hello.mp4  Go
hxz210.mp4 Go

您的选择很好,但您需要将结果存储到一个变量中,例如:

$count = $db->querySingle("SELECT COUNT(*) as count FROM Podcast_Export WHERE House_number = '".$value."'"); 
if($count <= 0){ 
    $db->exec("INSERT INTO Podcast_Export (House_number,Status) 
               VALUES ('".$value."', 'Go')");
}

使用 querySingle 获取 SQLite 中的行数。

请注意,我已经将House# House_number在这里并删除了AND status = 'GO'子句,因为它们都具有GO状态。

最新更新