Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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-将目录中的名称文件与sql行进行比较_Php_Sql_Mysqli - Fatal编程技术网

php-将目录中的名称文件与sql行进行比较

php-将目录中的名称文件与sql行进行比较,php,sql,mysqli,Php,Sql,Mysqli,我试图创建一个脚本,将目录中的文件名与数据库中的行进行比较,以获取数据库列表中不存在的所有文件 到目前为止,我使用的脚本打印出目录中的文件,但是当我尝试将这些值与我的sql进行比较时,我重复了很多结果 如何比较文件名以获取数据库中未列出的所有名称文件 目录: a.mp4 0.mp4 b.mp4 34.mp4 c.mp4 数据库行: > Date---------------Name---------------video_path > 01-01-01----------|jonh

我试图创建一个脚本,将目录中的文件名与数据库中的行进行比较,以获取数据库列表中不存在的所有文件

到目前为止,我使用的脚本打印出目录中的文件,但是当我尝试将这些值与我的sql进行比较时,我重复了很多结果

如何比较文件名以获取数据库中未列出的所有名称文件

目录:

a.mp4
0.mp4
b.mp4
34.mp4
c.mp4
数据库行:

> Date---------------Name---------------video_path
> 01-01-01----------|jonh--------------|a.mp4
> 02-01-01----------|andrea------------|b.mp4
> 03-01-01----------|faith-------------|c.mp4
结果应该是:

 0.mp4
 34.mp4
脚本:

$directory = '/var/www/html/EXAMPLE/resources/';

$files1 = scandir($directory, 1);

if ( $files1 !== false )
{
    //$filecount = count( $files );

    foreach ($files1 as $i => $value) {

            $sqlfindTmp = "SELECT * FROM `videos`";

            if ($resultTmp = mysqli_query($conn,$sqlfindTmp)) {

                    while ($row=mysqli_fetch_row($resultTmp)) {

                          if ($row[3] == $value) {


                          }else{

                             echo $value . "<br/>";
                         }
                    }
            }   

        }
    }

else
{
    echo 0;
}
$directory='/var/www/html/EXAMPLE/resources/;
$files1=scandir($directory,1);
如果($files1!==false)
{
//$filecount=count($files);
foreach($files1为$i=>$value){
$sqlfindTmp=“从“视频”中选择*”;
if($resultTmp=mysqli\u查询($conn,$sqlfindTmp)){
while($row=mysqli\u fetch\u row($resultTmp)){
如果($row[3]=$value){
}否则{
回显$value.“
”; } } } } } 其他的 { 回声0; }
您现在构建代码的方式是,它对每个文件进行SQL查询,并在每个查询上检索整个数据库,这目前可能不是问题,但当数据集增长时,会减慢速度。 我建议重新构造代码,以便首先查询数据库中的所有文件名,将其保存到数组中,然后循环遍历文件,检查它们是否在数据库中

// Query database
$sqlFind = 'SELECT `video_path` FROM `videos`';
$result = mysqli_query($conn, $sqlFind);
$db = []; // create empty array
while ($row = mysqli_fetch_row($result))
    array_push($db, $row[0]);
// Check files
$files1 = scandir($directory, 1);
if ( $files1 !== false ) {
    foreach ($files1 as $i => $value) {
        if (in_array($value, $db)) {
            // File exists in both
        } else {
            // File doesn't exist in database
        }
    }
} else {
    echo 0;
}

现在构建代码的方式是,它对每个文件进行SQL查询,并在每个查询上检索整个数据库,这现在可能不是问题,但当数据集增长时,会减慢速度。 我建议重新构造代码,以便首先查询数据库中的所有文件名,将其保存到数组中,然后循环遍历文件,检查它们是否在数据库中

// Query database
$sqlFind = 'SELECT `video_path` FROM `videos`';
$result = mysqli_query($conn, $sqlFind);
$db = []; // create empty array
while ($row = mysqli_fetch_row($result))
    array_push($db, $row[0]);
// Check files
$files1 = scandir($directory, 1);
if ( $files1 !== false ) {
    foreach ($files1 as $i => $value) {
        if (in_array($value, $db)) {
            // File exists in both
        } else {
            // File doesn't exist in database
        }
    }
} else {
    echo 0;
}

我同意Kalkran的观点,将“video_path”值放入数组并执行一次。scandir还将所有文件名返回到一个数组中。因此,您可以使用一个简单的数组_diff来获取目录中不在“video_path”中的文件数组

因此,我会尝试:

$sqlFind = 'SELECT `video_path` FROM `videos`';
$result = mysqli_query($conn, $sqlFind);
$db = []; // create empty array
while ($row = mysqli_fetch_row($result))
    array_push($db, $row[0]);
// Check files
$files1 = scandir($directory, 1);
$filesOfInterest = $files1 ?  array_diff($files1,$db) : null;

我同意Kalkran的观点,将“video_path”值放入数组并执行一次。scandir还将所有文件名返回到一个数组中。因此,您可以使用一个简单的数组_diff来获取目录中不在“video_path”中的文件数组

因此,我会尝试:

$sqlFind = 'SELECT `video_path` FROM `videos`';
$result = mysqli_query($conn, $sqlFind);
$db = []; // create empty array
while ($row = mysqli_fetch_row($result))
    array_push($db, $row[0]);
// Check files
$files1 = scandir($directory, 1);
$filesOfInterest = $files1 ?  array_diff($files1,$db) : null;