2012-02-19 3 views
0

Я пытаюсь вставить массив в базу данных. Почему это не работает?Вставить данные массива в базу данных

$array_zone = array(); 
$array_data = array(); 
while($row = mysql_fetch_array($keputusan1)){ 
$array_zone[] = $row['zone']; 
$array_data[] = $row['data']; 
} 

echo "<pre>"; 
print_r($array_zone); 
echo "<br>"; 
print_r($array_data); 
echo "</pre>"; 

$list_zone = implode(",", $array_zone); 
$list_data = implode(",", $array_data); 

for($i = 0; $i < 4; $i++) 
{ 
mysql_query("INSERT INTO `db`.`table1` (`id`, `domain`) VALUES ('$list_zone', '$list_data')"); 
} 

выход массива перед Implode:

Array 
(
    [0] => 270 
    [1] => 270 
    [2] => 255 
    [3] => 255 
) 

Array 
(
    [0] => ok.com. 
    [1] => lo.com. 
    [2] => i.com. 
    [3] => k.com. 
) 

Результат я получаю: phpmyadmin

0 ключ должен идти с данными в 0 ключ и 1 ключ должен идти с данными в 1 ключа и так далее ... Помогите мне пожалуйста. Спасибо.

+2

Вы, кажется, используете '$ list_zone' и' $ list_data' вместо '$ array_zone' и' $ array_data ' –

+0

@niomaster: Я обновляю свой вопрос. Он все еще не работает. – sg552

+0

См. Ответ alexis –

ответ

4

Вы можете использовать INSERT ... SELECT. Результат, возвращаемый в $keputusan1, представляет собой запрос SELECT. И это, безусловно, возвращает zone и data столбцов. Произнесите запрос SELECT zone, data, columns ... FROM tbl1.

Если вы используете INSERT ... SELECT новый запрос будет

INSERT INTO `db`.`table1` (`id`, `domain`) SELECT zone, data FROM tbl1"; 

Это будет SELECT первый затем INSERT его в один удар в.

Проблемы с вашим кодом являются

  1. 4 заявления SQL. Это должно быть 1.
  2. Вы должны использовать $array_zone и $array_data вместо $list_zone и $list_data если используется для цикла. Но это не должно быть шаг 1.
+1

+1 для вставки ... выберите. –

+0

Да. Это решает его и очень эффективно. Сегодня я узнал новое. Спасибо :) – sg552

1

Ваш list_zone (действительно массив_zone) заключен в один набор одинарных кавычек, поэтому вы передаете одну длинную строку. И вы делаете это четыре раза. Передавайте по одной паре значений за раз.

2

Мне кажется, что вы просто забыли использовать петлю-индекс ($ я) в цикле для доступа к массивам элементов:

#!/usr/bin/php 
<?php 
$array_zone = array('a','b','c','d'); 
$array_data = array('1','2','3','4'); 

print_r($array_zone); 
print_r($array_data); 

for($i = 0; $i < count($array_zone); $i++) 
{ 
    echo("INSERT INTO `db`.`table1` (`id`, `domain`) VALUES ('$array_zone[$i]', '$array_data[$i]')\n"); 
} 
?> 

Теперь замените это эхо вашим вызовом mysql_query и удалите '\ n' в конце ...

+0

Спасибо. На самом деле это решает это. – sg552

+0

Рад помочь, пожалуйста, отметьте как правильный ответ ... – mindandmedia

+0

О, я могу выбрать только один правильный ответ. Вы ответили, решив мою проблему, но другой пользователь дал мне другой подход, который очень эффективен. В любом случае, я очень ценю вашу помощь. Спасибо :) – sg552

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