запись элементов массива в базу mysql

kopipast

Новичок
запись элементов массива в базу mysql

поискал везде, не нашёл :(

вопрос таков. можно ли как-нибудь записать элементы массива в таблицу базы данных за один подход а не циклом гонять каждый элемент массива:

PHP:
for ($i = 0; $i < count($array); $i++) {
	$sql = "INSERT INTO $table1 (info) values ('$array[$i]')";
	mysql_query($sql) or die("error: ".mysql_error());
}
?
 

kopipast

Новичок
Кром, спасибо, но есть нюанс...
а если массив из тысяч элементов?

по идее, тогда циклом формировать sql запрос?
или менее ресурсоёмко будет записывать отдельными запросами по каждому элементу?
 

Кром

Новичок
Надо поэксперементировать и найти оптимальное решение. Пробовать делать инсерты по 500 элементов, по 1000 и т.д. Пока не будет найден оптимальный вариант для твоей задачи.
По кадому элементу записывать, если элементов более 100 очень вредно. :)
 

kopipast

Новичок
ясно, спасибо большое! :)
если у кого-нибудь есть что добавить, милости прошу ;)
 

Wicked

Новичок
в свое время под свои же нужды писал класс, который занимается более прозрачным составлением bulk insert'ов, принимая во внимание max_allowed_packet. Производительность была очень хорошей, но, к сожалению, муся падала при запросах размером под мегабайт. Разбираться было лень, поэтому выбрал компромисс: поставил максимальный размер запроса 32К. В моем случае это было около 1000..4000 инсертов за 1 запрос.

Класс имел такую шапку:
PHP:
  class mysql_writer {
    function mysql_writer($my, $blank) {
      ...
    }
    function add($str) {
      ...
    }
    function finalize() {
      ...
    }
  }
написать реализацию этих методов труда не составит %)

пример использования:
PHP:
        $query = "insert into `{$prefix}TEMP_NF (`NF_WORD`, `NF_FLAGS`) values ";
$writer_trans = new MySQL_Writer($this->get_mysql_handler(), $query);
while ($line = fgets($fp)) {
  list($word, $flag) = explode("/", trim($line)."/");
  $buffer = "('".mysql_escape_string($word)."','".mysql_escape_string($flag)."')";
  $writer_trans->add($buffer);
}
$writer_trans->finalize();
 

kopipast

Новичок
Wicked, благодарю :)
так и сделаю, потом, может, поэкспериментирую :)
 
Сверху