2014-01-17 68 views
0


創建多個陣列中的單個插入語句值

我有一個關於如何實現我的使用case.I有一組我想在數據庫中插入陣列的查詢,但現在我很困惑如何我能做到這一點efficiently.I正在使用PHP和MySQL。下面是用例:

$shareUrl = array(); 
$theInsertUrl = array(); 
$authKeyArray = array(); 

以上是加工一些information.Now我必須將它插入到數據庫後,我得到的陣列,但不是一個一個地去做,我認爲有一個單插入將是更好的解決方案(如果不是請更正)。
對於多重插入我的SQL查詢的values部分必須

($shareUrl[0],$theInsertUrl[0],$authKeyArray[0]),($shareUrl[1],$theInsertUrl[1],$authKeyArray[1]),... 

我想編寫一個for循環,並創建一個多維數組這樣

for($i=0;$i<count_of_array;$i++){ 
     $multiArray[$i]['shareUrl'] = $shareUrl[0]; 
     $multiArray[$i]['theInsertUrl'] = $theInsertUrl[0]; 
     $multiArray[$i]['authKeyArray'] = $authKeyArray[0]; 
    } 

但它仍然將是乏味的使用這在SQL查詢的values部分,因爲它接受這樣的格式,如('val1','val2'),('val1','val2')。我需要關於如何去實施它的建議?上述方法是否正確或有更好的解決方案我應該使用單插入語句嗎?

+0

一個忠告是:不要試圖太早優化。無論如何,多行單插入的確速度更快 - 當你有很多行時。如果你每天只需插入數十行數據,你就不需要*來優化它,如果我們談論的是成千上萬的數據,你會注意到優化。基本上,您可以節省每個查詢與主鍵生成時間之間的請求時間。 爲了幫助您獲得更多信息,您是使用純粹的'mysql_'函數,'mysqli'還是'PDO'? 有些數字也有幫助,比如陣列有多大。 – aleation

+0

我正在使用'mysqli'功能!其實我正在做一個文件共享應用程序。因此,可以同時插入很多插件!最初雖然數量不會很大,但隨着我的進步,它會快速增長! – KillABug

+0

對不起,我不熟悉'mysqli',從mysql跳到PDO,我不確定'mysqli'是否已經命名參數綁定,據我所知可以按順序使用問號'?',但不是:像PDO中的value1。所以我不確定在實現上,更好的讓一個更有經驗的'mysqli'來回答你。順便說一句,你應該使用'mysqli'中的準備語句,或者你並不是真的注入安全 – aleation

回答

1

只是把一切作爲數組中的字符串,然後爆它

$data= array(); 
for ($i = 0; $i < $size; $i++) { 
    $data[] = "('".$mysqli->real_escape_string($array1[$i])."','".$mysqli->real_escape_string($array2[$i])."')"; 
} 
if (sizeof($data) > 0) { 
    $query = "INSERT INTO table (value1,value2) VALUES ".implode(",",$data).";"); 
    $mysqli->real_query($query) 
} 
+2

你不應該實際上建議有'mysql_query()'函數的人,因爲它們被棄用,不是sql注入安全的,特別是如果你甚至不會逃脫數據... – aleation

+0

絕對正確 –

+0

我正在使用'mysqli'! :) – KillABug