1

可能是一个令人困惑的标题 - 我确实在 SO 档案中找到了一个我认为可以解决问题但仍然没有得到它的结果。

我正在使用一个函数来显示服务器目录中的所有文件(对我来说是管理员)(这很好用)我也有文件名存储在数据库表中......

我想做的是;在生成服务器文件列表时,还要在表中查询匹配的文件名 - 我正在尝试识别服务器上不在我的 db 表中的孤儿。

好像我以前做过这个,或者这是一个“简单”的查询任务,但我正在画一个完全空白并撞到墙上。(如果一行没有结果,您的基本查询只会查找下一个匹配项,我想标记不匹配项)。

我在 SO 档案中找到的一个解决方案是使用“NOT IN”查询,例如:

$files_on_server = "file1,file3,file4,file7";
// Your SQL WHERE clause...
...WHERE `filename` NOT IN ($files_in_server) 

但这不是为我做的。在此先感谢您的任何建议。

4

4 回答 4

2

看起来这一切都是关于标点符号的。单引号的值怎么样?

$files_on_server = "'file1','file3','file4','file7'";

但通常更可取的是使用准备好的语句 - google for mysqli 和 PDO。

于 2013-01-11T20:13:53.587 回答
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) . "')
于 2013-01-11T20:13:26.500 回答
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);
于 2013-01-11T20:14:13.983 回答
0

我认为您的问题出在这一行:

$files_on_server = "file1,file3,file4,file7";

它应该是(注意个别引号):

$files_on_server = "'file1','file3','file4','file7'";

但也要考虑为什么会有孤立文件。如果是因为文件是通过 FTP 删除的,请考虑编写一个 php 接口来删除它们。当有大量文件需要跟踪时,当前的解决方案可能会开始变慢。

于 2013-01-11T20:14:51.713 回答