检查数据库中是否已存在文件夹/文件

时间:2014-02-20 00:04:02

标签: php sql database

我的服务器上有一些文件要放入数据库中。我将添加一些更多信息,例如关于文件的注释(在我修复此问题后,文件的SQL查询将更容易与数据库进行比较)到数据库,还可以节省一些带宽。问题是我想查看数据库中是否已存在文件夹/文件。如果没有,请将它们添加到数据库中。

以下是我的代码目前的样子(sql()是我创建的函数)(下面的代码只回显用于开发目的的数据库中现有名称的名称):

$dir = new RecursiveDirectoryIterator($admin['data_folder_main'], FilesystemIterator::SKIP_DOTS);
$it = new RecursiveIteratorIterator($dir, RecursiveIteratorIterator::SELF_FIRST);
$it->setMaxDepth(1);

foreach($it AS $fileinfo) {

    # DATABASE (fetch)
    $folder = sql("SELECT *
                   FROM items_folders
                   WHERE name_folder = :folder
                  ", Array('folder' => $it->getSubPath()), 'fetch');


    echo $folder['name_folder'].'<br>';

}

以下是数据库的外观:

CREATE TABLE IF NOT EXISTS `items_folders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_folder` int(11) NOT NULL DEFAULT '0',
  `name_folder` text NOT NULL,
  `name_folder_sub` text NOT NULL,
  PRIMARY KEY (`id`)
)

问题是上面的代码从数据库打印现有名称,然后回显与服务器上文件夹中的文件夹/文件相同的名称。这就是我想要的方式:文件夹是否存在于数据库中?是或否。

是?好!忽略它(不要将它添加到数据库中)。继续下一个文件夹/文件(如果有的话)。

没有?将其添加到数据库中。继续下一个文件夹/文件(如果有的话)。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

您只需要测试是否有值,如果没有,请将该项添加到数据库

foreach($it AS $fileinfo) {

    # DATABASE (fetch)
    $folder = sql("SELECT *
                   FROM items_folders
                   WHERE name_folder = :folder
                  ", Array('folder' => $it->getSubPath()), 'fetch');


   //test to see if there is a value in the database
      if($folder['name_folder']==''){
          // if not, add it
          strSQL = "UPDATE items_folders SET name_folder='". $folder['name_folder'] . "' WHERE id= ". $folder['id'];
         //you don't tell us if you are using PDO or mysql_ so do your own execution
         execute;
         echo "item added";
      }
}

未经测试,但它可以让您了解该怎么做。

答案 1 :(得分:0)

如果您使用

" SELECT CAST(COUNT(*) AS BIT) AS existing FROM items_folders WHERE name_folder = :folder"

你应该得到一个布尔返回值(如果存在,则返回true或1)。

"SELECT DISTINCT * FROM items_folders WHERE name_folder = :folder"

删除所有double值,如果你想要文件夹,如果它不存在,请使用:

"[Insert-Statement] WHERE NOT EXISTS (SELECT * FROM items_folders WHERE name_folder = :folder)"