可能是一个令人困惑的标题 - 我确实在S.O.中找到了一个结果。档案,我认为可以做到这一点,但仍然没有得到它。
我正在使用一个函数在服务器上的目录中显示所有文件(对我来说是管理员)(这很好) 我也有文件名存储在数据库表中......
我想做的是;在生成服务器文件列表时,还要查询表中是否有匹配的文件名 - 我正在尝试识别服务器上不在我的数据库表中的孤儿。
看起来我之前已经完成了这项工作或者查询的“简单”任务,但是我总是画一个空白并撞墙。 (如果没有行的结果,您的基本查询只会查找下一个匹配项,我想标记不匹配项。)
我在S.O.中找到的一种解决方案。档案使用“NOT IN”查询类似于:
$files_on_server = "file1,file3,file4,file7";
// Your SQL WHERE clause...
...WHERE `filename` NOT IN ($files_in_server)
但那并不适合我。 提前感谢任何建议。
答案 0 :(得分:2)
看起来像是标点符号。如何单引号值?
$files_on_server = "'file1','file3','file4','file7'";
但通常更倾向于使用预备语句 - 谷歌搜索mysqli和PDO。
答案 1 :(得分:1)
我认为此$files_on_server
应与此匹配:$files_in_server
$files_on_server = "'file1','file3','file4','file7'";
// Your SQL WHERE clause...
...WHERE `filename` NOT IN ($files_on_server)
阅读你的问题。如果要收集文件名,可以使用递归函数将它们放入数组中。然后你可以在 NOT IN 语句
中内爆数组NOT IN('" . implode("' , '", $files_on_server) . "')
答案 2 :(得分:0)
你的字符串:
$files_on_server = "file1,file3,file4,file7";
进入这个:
$files_on_server = "'file1','file3','file4','file7'";
SELECT *
FROM files
WHERE filename NOT IN ($files_on_server);
答案 3 :(得分:0)
我认为你的问题出在这一行:
$files_on_server = "file1,file3,file4,file7";
它应该是(注意个别引用):
$files_on_server = "'file1','file3','file4','file7'";
但也要考虑为什么有孤立的文件。如果是因为文件是通过FTP删除的,请考虑编写一个php界面来删除它们。当需要跟踪大量文件时,当前的解决方案可能会开始减速。