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

时间:2019-06-19 17:00:42

标签: php sql sqlite mysqli-fetch-array

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

$src_dir = ('\\\ABCD-ST-001\Audio_Test\podcast\incoming_folder'); 

$mp4_files = preg_grep('~\.(mp4)$~', scandir($src_dir));

print_r(array_values($mp4_files));  // LineA

这是从 Line#A 获得的 O / P

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

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

    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上的脚本,并在Podcast_Export表内再次添加 $ src_dir 中存在的mp4文件。如下所示:

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

1 个答案:

答案 0 :(得分:0)

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

$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状态。