我的服务器上有一些文件要放入数据库中。我将添加一些更多信息,例如关于文件的注释(在我修复此问题后,文件的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`)
)
问题是上面的代码从数据库打印现有名称,然后回显与服务器上文件夹中的文件夹/文件相同的名称。这就是我想要的方式:文件夹是否存在于数据库中?是或否。
是?好!忽略它(不要将它添加到数据库中)。继续下一个文件夹/文件(如果有的话)。
没有?将其添加到数据库中。继续下一个文件夹/文件(如果有的话)。
我怎样才能做到这一点?
答案 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)"