来自循环的php mysql查询 - 确定哪些表行不在循环中

时间:2013-01-11 20:10:03

标签: php mysql

可能是一个令人困惑的标题 - 我确实在S.O.中找到了一个结果。档案,我认为可以做到这一点,但仍然没有得到它。

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

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

看起来我之前已经完成了这项工作或者查询的“简单”任务,但是我总是画一个空白并撞墙。 (如果没有行的结果,您的基本查询只会查找下一个匹配项,我想标记不匹配项。)

我在S.O.中找到的一种解决方案。档案使用“NOT IN”查询类似于:

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

但那并不适合我。 提前感谢任何建议。

4 个答案:

答案 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界面来删除它们。当需要跟踪大量文件时,当前的解决方案可能会开始减速。