2016-12-23 5 views
1

У меня есть массив с именем $output, который содержит:Вставка ассоциативного массива в базе данных MySQL в PHP

Array 
(
    [0] => Array 
     (
      [0] => J Arora 
      [1] => India 
     ) 

    [1] => Array 
     (
      [0] => J Ramuj 
      [2] => Russia 
     ) 

    [2] => Array 
     (
      [1] => KJ Tris 
      [2] => Germany 
     ) 

) 

Как я вставить эти данные в таблицу базы данных MySQL, как эти

--------------- 
name | country 
-------|--------- 
J Arora|India 
-------|-------- 
J Ramuj|Russia 
-------|-------- 
KJ Tris|Germany 
-------|-------- 

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

+0

просто вы можете использовать цикл foreach, чтобы вставить то же самое? действительно хотите вставить запрос? – Tiger

+0

Какой уровень абстракции базы данных вы используете? – Thomas

+0

Откуда вы знаете, какое имя и какая страна? –

ответ

3

Просто петля он с foreach и использует собственные PHP-функции, такие как current() и end(), чтобы получить ваш elem энтов. Учитывая, что вы просто два элемента в массиве во все времена, это должно работать

foreach ($output as $v) { 
    echo current($v); // Name 
    echo end($v); // Country 
} 

Адаптировать это построить свой запрос и выполнить его внутри цикла. Внутри петли вы можете сделать

foreach ($output as $v) { 
    $sql = "INSERT INTO table (`name`, `country`) VALUES ('".current($v)."', '".end($v)."')"; 
    // TODO: Execute query 
} 

Вы также должны заметить, что любой запрос с использованием переменных должен использовать подготовленные инструкции с заполнителями. Оба MySQLi и PDO поддерживают это.


Использование подготовленных заявлений

Постройте запрос прежде, и выполнить его, как вы цикл его с соответствующими переменными, связанными.

Пример с PDO:

$stmt = $pdo->prepare("INSERT INTO table (`name`, `country`) VALUES (:name, :country)"); 
foreach ($output as $v) { 
    $stmt->execute(array("name" => current($v), "country" => end($v)); 
} 

Пример с MySQLi:

$stmt = $mysqli->prepare("INSERT INTO table (`name`, `country`) VALUES (?, ?)"); 
foreach ($output as $v) { 
    $name = current($v); 
    $country = end($v); 
    $stmt->bind_param("ss", $name, $country); 
    $stmt->execute(); 
} 
+1

Спасибо. Я не знал об этих функциях. – GKumar

+0

Лучший подход - это, конечно, использовать подготовленные заявления - здесь мы имеем дело с переменными. Обновлен мой ответ, чтобы отразить это с примерами как для MySQLi, так и для PDO. – Tolios

+0

Да. Я использовал только PS. – GKumar

0

Давайте назовем ваш массив user_details

foreach($user_detail as $single_user){ 
     $i = 0; 
     foreach($single_user as $user){ 
      if($i==0){ 
      $name = $user; 
      } else { 
      $country = $user; 
      } $i++; 
     } 
    $sql_query = INSERT into 'Table'($name, $country); 
    //Execute this query as per mysqli or or mysql 

} 

// Учитывая, что первое значение всегда имя и 2-го значения всегда название страны

+1

* Я не могу извлечь эти значения отдельно от заданного массива, так как их индекс не находится в последовательности. * –

+1

Индекс массивов не находится в последовательности. Это не будет работать. – GKumar

+0

Надеюсь, это сработает –

0
$sql = "INSERT INTO tablename(name,country) VALUES"; 

for($i=0;$i<sizeof($myarray);$i++){ 
    $sql.="(".$myarray[0].",".$myarray[1].")"; 
} 

в настоящее время выполняют $sql

0
for ($a=0; $a<count($array); $i++) { 
    $dataArray=array_values($array[$i]); 
    for ($j=0; $j<count($dataArray); $j++) { 

     $name=$dataArray[0]; 
     $country=$dataArray[1]; 
     $insert_query="insert into tablename set name='$name', country='$country'"; 
     $res_query=mysql_query($insert_query); 
    } 
} 

Надеется, что это будет работает для вас.

0

Возможно, это поможет. Его не тестировали.

$query = "INSERT into 'your table name' ('name', 'country') VALUES "; 
foreach($yourArray as $data) { 
    foreach($data as $d) { 
     $query .= "('.$d[0].','.$d[1]),"; 
    } 
} 

$query = substr($query, 0, -1); // To remove last comma from query string 

Затем вы можете выполнить этот запрос.

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