1

おそらく紛らわしいタイトルです。SOアーカイブで、うまくいくと思った結果が1つ見つかりましたが、それでもうまくいきませんでした。

サーバー上のディレクトリにあるすべてのファイル(管理者として私にとって)を表示する関数を使用しています(これは正常に機能します)データベーステーブルにもファイル名が保存されています...

私がやりたいのは; サーバーファイルリストを生成している間、一致するファイル名をテーブルに照会します-データベーステーブルにないサーバー上の孤立を識別しようとしています。

以前にこれを行ったことがあるか、クエリを使用する「簡単な」タスクのようですが、完全に空白を描画して壁にぶつかっています。(行の結果がない場合、基本的なクエリは次の一致を探すだけで、不一致にフラグを立てます)。

SOアーカイブで私が見つけた1つの解決策は、次のようなクエリを「NOTIN」で使用することです。

$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'";

ただし、通常は、プリペアドステートメント(mysqliおよびPDOの場合はgoogle)を使用することをお勧めします。

于 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)

あなたの質問を読んでから。ファイル名を収集する場合は、再帰関数を使用してそれらを配列に入れることができます。次に、 NOTINステートメントで配列を内包することができます

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 に答える