PHP объемный ввод foreach

У меня есть скрипт curl, который считывает данные из удаленного источника. Ниже приведен текущий код:

function download_page($path){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$path); curl_setopt($ch, CURLOPT_FAILONERROR,1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT, 15); $retValue = curl_exec($ch); curl_close($ch); return $retValue; } $sXML = download_page('http://remotepage.php&function=getItems&count=100&page=1'); $oXML = new SimpleXMLElement($sXML); foreach($oXML->results->item->item as $oEntry){ $insert_query = mysql_query("INSERT INTO tbl_item (first_name, last_name, date_added) VALUES ('" . $oEntry->firstname . "', '" . $oEntry->lastname . "', '" . date("Ymd H:i:s") . "')"); } 

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

Мне интересно, есть ли способ сделать массовый оператор вставки, чтобы вставить все 100 записей одновременно.

Заранее спасибо.

Вы можете сделать это в одном заявлении, сделав что-то вроде этого:

 $sXML = download_page('http://remotepage.php&function=getItems&count=100&page=1'); $oXML = new SimpleXMLElement($sXML); $query = "INSERT INTO tbl_item (first_name, last_name, date_added) VALUES"; foreach($oXML->results->item->item as $oEntry){ $query .= "('" . $oEntry->firstname . "', '" . $oEntry->lastname . "', '" . date("Ymd H:i:s") . "'),"; } mysql_query($query); 

Вы можете вставить все записи сразу, как показано ниже: Как при экспорте данных из таблицы mysql.

 INSERT INTO tablename (id, field2, field3, field3) VALUES ('', 5454, '454', '545'), ('', 'erwe', 'rewrew', 'werew'), ('', 'ewrew', 'rwerwe', 'werwer'), ('', 'jkj', 'ere', 'uju') , ('', '343', '3434', 'dfdf'); 

для операции объемной вставки вы можете добавить скрипт в переменную, и вы можете запустить это как целое, но для этого вам нужно использовать mysqli_multi_query . Проверьте эту ссылку http://www.php.net/manual/en/mysqli.multi-query.php

Может, что-то вроде этого?

 foreach($oXML->results->item->item as $oEntry){ $inserts[] = "(". implode(', ', array ($oEntry->firstname, $oEntry->lastname, date("Ymd H:i:s") ) ) .")"; } $insert_query = mysql_query("INSERT INTO tbl_item (first_name, last_name, date_added) VALUES ".implode(', ', $inserts));