2011-05-22 38 views
1

嘿傢伙! 我有一個腳本,應該將圖像添加到數據庫中。它這樣做。唯一的問題是,它不僅增加了新的圖像,而且增加了現有的圖像。 我確定它是一個非常簡單的任務,對我來說太多了!檢查加工前的條目

所以這段代碼應該再次檢查一個條目是否存在,然後添加圖像如果它不存在。 謝謝:)

<?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!"; 
} 


?> 

回答

2

可以使filename領域獨樹一幟(CREATE UNIQUE INDEX filename_idx ON images (filename)),然後簡單地用INSERT IGNORE INTO images取代INSERT INTO images

作爲一項額外的獎勵,您現在還將有filename字段索引,這將加快SELECTfilename

+0

嘿我的朋友,謝謝你的時間,這似乎工作:) – Gerald 2011-05-22 19:15:49

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!"; 
    } 
} 
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!"; 
} 
+0

嘿波格丹,謝謝你的詳細解答!我使用了這段代碼,但得到了下面的迴應:Warning:implode()[function.implode]:在第21行中傳遞的無效參數.../install_images.php 您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊,在第1行附近使用正確的語法來使用任何建議? – Gerald 2011-05-22 19:12:07

+0

@Gerald你應該在插入查詢之前通過目錄查看'$ images'包含的內容。 – 2011-05-22 19:14:37

1

爲什麼不在文件上做一個md5sum,並將其用於唯一性,然後做一個select來查看該文件是否存在,如果它沒有插入,並返回該id作爲批准狀態,或者如果它已經存在現有記錄的ID。按文件名進行操作很好,除非有幾個人上傳同一個文件,但名稱不同。這樣做的缺點是如果文件很大,那麼需要一些資源來做到這一點。