2014-01-17 2 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',); 

Что было бы достойным способом сделать это?

EDIT: Не нужно указывать, как подключиться к базе данных, мне просто нужно иметь дело с данными массива.

+0

, если вы добавляете все элементы как разные строки, то это правильный способ, который я предполагаю. Единственное, что вам нужно позаботиться, вынимая последние дополнительные, из запроса –

ответ

1

Несколько комментариев:

  • Вы должны переключиться на PDO или MySQLi и использовать подготовленные заявления со связанными переменными. Теперь у вас серьезная проблема с SQL-инъекцией;
  • Вы можете объединить несколько вставок в один оператор insert: INSERT ... VALUES ('local','file','a'),('remote','image','b'),(etc.).
    Вы также можете подготовить свое заявление один раз, а затем выполнить его несколько раз, но объединение будет более эффективным, особенно с увеличением числа вставок.

Простой (и непроверенные неполная ...) Пример в 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

Мне просто пришлось заменить некоторые переменные, но это сработало лучше, чем я ожидал! большое спасибо –

Смежные вопросы