Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自循环的php mysql查询-确定哪些表行不在循环中_Php_Mysql - Fatal编程技术网

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

来自循环的php mysql查询-确定哪些表行不在循环中,php,mysql,Php,Mysql,可能是一个令人困惑的标题——我确实在S.O.档案中发现了一个结果,我认为这会起作用,但仍然没有得到它 我正在使用一个函数来显示服务器上某个目录中的所有文件(对我来说是管理员)(这很好用) 我还将文件名存储在数据库表中 我想做的是;在生成服务器文件列表的同时,还要查询表中是否有匹配的文件名-我试图识别服务器上不在我的db表中的孤立文件 看起来我以前做过这个,或者这是一个“简单”的查询任务,但我画了一个完全空白和撞墙。(如果一行没有结果,基本查询只查找下一个匹配项,我想标记非匹配项) 我在S.O.档

可能是一个令人困惑的标题——我确实在S.O.档案中发现了一个结果,我认为这会起作用,但仍然没有得到它

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

我想做的是;在生成服务器文件列表的同时,还要查询表中是否有匹配的文件名-我试图识别服务器上不在我的db表中的孤立文件

看起来我以前做过这个,或者这是一个“简单”的查询任务,但我画了一个完全空白和撞墙。(如果一行没有结果,基本查询只查找下一个匹配项,我想标记非匹配项)

我在S.O.档案中找到的一个解决方案是在查询中使用“NOT in”,类似于:

$files_on_server = "file1,file3,file4,file7";
// Your SQL WHERE clause...
...WHERE `filename` NOT IN ($files_in_server) 
但这不是为了我。
提前感谢您的建议。

我认为服务器上的
$files\u
应该与服务器上的
$files\u匹配

 $files_on_server = "'file1','file3','file4','file7'";
// Your SQL WHERE clause...
...WHERE `filename` NOT IN ($files_on_server)
通过阅读你的问题。如果要收集文件名,可以使用递归函数将它们放入数组中。然后可以在语句中而不是在语句中内爆数组

NOT IN('" . implode("' , '", $files_on_server) . "')

看起来都是关于标点符号的。单次引用这些值怎么样

$files_on_server = "'file1','file3','file4','file7'";
但通常更可取的做法是使用预先准备好的语句—google for mysqli和PDO。

您的字符串:

$files_on_server = "file1,file3,file4,file7";
把它变成这样:

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

SELECT *
FROM files
WHERE filename NOT IN ($files_on_server);

我认为你的问题在于这一行:

$files\u on_server=“file1,file3,file4,file7”

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

$files\u on_server=“'file1'、'file3'、'file4'、'file7'


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

根据您所说的
不在
中可能是最简单的方法。什么不起作用?只是跟进-我终于让查询起作用了,但是它是我想要的相反结果-
不在
显示数据库中的标题,而这些标题不在我创建的服务器文件列表中。我在找相反的。。。类似于(psuedo)“在DB表中查找file1…不匹配,但在DB表中标记“file1”不匹配…查找file2…等等,已解决-我只需将echo结果移到查询循环之外}echo$filename,它显示了一个空白结果,还重置了$filename=”“并继续通过我的服务器文件名的外循环返回。我只想把这个扔出去…:)永久测试版?看起来很有趣。如果我自己需要这个,我一定会记得我编辑了代码incorperate@full.stack.ex answer。他说的是对的。好吧,在我核对之前,我错过了你早些时候的评论。我试试看,谢谢!看来
不在
中是一种方法,所以我会继续使用它-我使用的是
mysql\u fetch\u array():
所以我肯定有一个打字错误或我缺少的问题…就像其他一些答案所建议的,可能是服务器上的$files\u与服务器上的$files\u。无论如何,“像这样的文件名.txt”都需要引号,我会将其标记为已应答,以确认
不在
中,并进一步排除代码中的故障。谢谢