2014-01-17 100 views
0

我試圖插入下面的數組(從HTML形式),但我相信我是一個非常可怕的方式與這一類工作插入陣列MySQLdb的

數組:

Array (
    [0] => Array (
     [0] => local 
     [1] => file 
     [2] => a 

    ) 
    [1] => Array (
     [0] => remote 
     [1] => image 
     [2] => b 
    ) 
) 

實際代碼:

<?php 
if(isset($_POST)==true && empty($_POST)==false){ 
$dataa = ($_POST['code_list']); 
} 
$data = array_chunk($_POST['code_list'],6); 

foreach ($data as $type=>$ba) { 
    echo "INSERT INTO table(f1, f2, f3,) values ("; 
    foreach ($ba as $a) { 
     echo "'$a',"; 
    } 
    echo ");<br>"; 
} 

>

電流輸出:

INSERT INTO table(f1, f2, f3,) values ('local','file','a',); 
INSERT INTO table(f1, f2, f3,) values ('remote','image','b',); 

什麼是一個體面的方式來做到這一點?

編輯:不需要顯示如何連接到數據庫,我只需要處理數組數據。

+0

如果您將所有項目添加爲不同的行,那麼它是我假設的正確方式。只有你需要小心取出最後一個額外的,從查詢 –

回答

1

幾點意見:

  • 您應該切換到PDO或mysqli的,並且使用帶有綁定變量預處理語句。現在你有一個嚴重的SQL注入問題;
  • 您可以在一個插入語句中合併多個插入:INSERT ... VALUES ('local','file','a'),('remote','image','b'),(etc.)
    您也可以準備一次陳述,然後多次執行,但合併會更有效率,尤其是隨着插入次數的增加。

簡單(uncomplete和未經考驗的...)例如在PDO:

$sql = 'INSERT INTO table(f1, f2, f3) VALUES '; 
$values = array(); 
$valCount = 1; 
foreach ($data as $type=>$ba) { 
    $row = array(); 
    foreach ($ba as $a) { 
    $val = ":value{$valCount}"; 
    $row[] = $val; 
    $values[$val] = $a; 
    $valCount++; 
    } 
    $sql .= '(' . implode(', ', $row) . '),'; 
} 
$sql = rtrim($slq, ','); 

// execute the sql statement using PDO 
$stmt = $db->prepare($sql); 
$stmt->execute($values); 

在循環和修整結束時,SQL應該像:

INSERT INTO table(f1, f2, f3) VALUES (:value1, :value2, :value3),(:value4, :value5, :value6) 

值數組應該包含您的值的密鑰:value1 - :value6

+0

你能舉一個例子我怎麼可以工作的數組來使用它? –

+0

@Thales我已經添加了一個示例,但它沒有經過測試,因此您需要檢查sql字符串和值數組是否正確構建。 – jeroen

+1

我只需要替換一些變量,但是這個工作比我預期的更好!非常感謝 –