2011-05-27 98 views
0

我正在使用uploadify將圖片上傳到服務器。後端我正在使用PHP腳本。在PHP腳本中,除了複製到目標位置之外,我還在數據庫中插入文件位置和其他一些細節。uploadify php mysql - 批量上傳和批量插入

問題: -如果我上傳20個文件,PHP腳本被調用20次,並且數據庫插入語句被調用20次以插入不同的圖像。絕對調用數據庫20次是低效率的方式。有什麼辦法可以保存文件名(和位置),並且只需一次調用插入語句(最後)來一次插入所有20條記錄?

感謝您的幫助

問候

基蘭

+0

顯示您的查詢,您可以在一個查詢中插入多個值在mysql中,並且您的腳本在一個循環中運行,直到它上傳所有文件 – Ibu 2011-05-27 01:35:23

+0

謝謝@lbu您的評論。這裏的問題不在於使用sql查詢。將20個文件名和位置保存在一些臨時位置。但uploadify不支持會話(按照我的理解) – Bujji 2011-05-27 11:37:38

回答

1

一種方法我建議,這是通過mysqli擴展使用事先準備好的聲明。引述的主要優點:

在SQL中使用準備 聲明的實際目的是削減的 處理查詢的成本;不要將 數據與查詢分開。這就是它現在使用w/php的 ,而不是如何在 設計用於第一個 的地方。使用SQL你砍的 成本執行多個類似的查詢 下來用事先準備好的聲明.. 否則將中止解析, 驗證和最經常說查詢了 前產生 執行計劃。這就是爲什麼他們在 循環中運行得更快,因爲他們的表情做得比他們的IMMEDIATE查詢 要快。

來源:http://us2.php.net/manual/en/mysqli.prepare.php#103730

爲了讓你能如何利用這樣一個例子:

$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

if ($stmt = $mysqli->prepare("INSERT INTO `images` (`location`, `size`, `othervalues`) VALUES(?, ?, ?)")) { 
    foreach($images as $image) { 
    // s = string value 
    // i = integer value 
    $stmt->bind_param("sis", $image['location'], $image['size'], $image['othervalues']); 
    $stmt->execute(); 
    } 
    $stmt->close(); 
} 
// Your prepared statement failed, handle the error 
else { 
} 

$mysqli->close(); 

我建議在mysqli::preparemysqli_stmt::bind_param閱讀了關於該過程是如何工作的更多信息。我也建議您閱讀prepared statements in the MySQL documentation

+0

感謝@onteria_您的回覆。這裏的問題是我甚至沒有Image數組。如果我有圖像陣列,我肯定可以寫一個mysqli批量插入來執行一次。由於PHP被稱爲永遠的文件,我只得到當前的文件名。一些如何我必須暫時存儲所有文件。但是uploadify不支持會話(按照我的理解) – Bujji 2011-05-27 11:35:53