因此,此代码应再次检查条目是否存在,然后添加图像(如果不存在)。 谢谢:))
<?php
include('mysql.php');
if ($handle = opendir('images')) {
/* This is the correct way to loop over the directory. */
while (false !== ($file = readdir($handle))) {
if($file!='.' && $file!='..') {
$images[] = "('".$file."')";
}
}
closedir($handle);
}
$query = "INSERT INTO images (filename) VALUES ".implode(',', $images)." ";
if (!mysql_query($query)) {
print mysql_error();
}
else {
print "finished installing your images!";
}
?>
答案 0 :(得分:2)
我们来看看。要检查退出的文件名是否已存储在数据库中,您必须执行以下操作:
PS:你应该要求你的mysql.php文件,没有它,你的脚本的其余部分将无法工作。
<?php
require_once('mysql.php');
$existing_files = array();
$qry = mysql_query("SELECT filename FROM images WHERE 1");
while($row = mysql_fetch_assoc($qry)) {
array_push($existing_files, $row['filename']);
}
if ($handle = opendir('images')) {
while (false !== ($file = readdir($handle))) {
if($file!='.' && $file!='..' && !in_array($file, $existing_files)) {
$images[] = "('".$file."')";
}
}
closedir($handle);
}
$query = "INSERT INTO images (filename) VALUES ".implode(',', $images)." ";
if (!mysql_query($query)) {
print mysql_error();
}
else {
print "finished installing your images!";
}
答案 1 :(得分:2)
您可以将filename
字段设为唯一(CREATE UNIQUE INDEX filename_idx ON images (filename)
),然后将INSERT INTO images
替换为INSERT IGNORE INTO images
。
作为一个额外的好处,您现在还可以将filename
字段编入索引,这将SELECT
加快filename
的速度。
答案 2 :(得分:1)
您应该在数据库中添加filename
作为唯一键。
或者,你可以使用这个PHP脚本:
$exists = mysql_query("SELECT * FROM images
WHERE filename LIKE '%".mysql_real_escape_string($images[0])."%'");
if(mysql_num_rows($exists == 0)){
$query = "INSERT INTO images (filename) VALUES ".implode(',', $images)." ";
if (!mysql_query($query)) {
print mysql_error();
}
else {
print "finished installing your images!";
}
}
答案 3 :(得分:1)
为什么不对文件执行md5sum,并将其用于唯一性,然后执行select以查看文件是否存在,如果不是插入文件并将id作为批准状态返回,或者如果它已经存在现有记录的id。通过文件名来做是好的,除非有几个人上传相同的文件但命名不同。这样做的缺点是如果文件很大,那么你需要一些资源才能做到这一点。