2012-05-16 2 views
4

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

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("Y-m-d H:i:s") . "')"); 
} 

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

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

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

+1

http://en.wikipedia.org/wiki/SQL_injection –

+1

Вы уверены, что ее «INSERT» медленный, а не запрос 'cURL'? Попробуйте «эхо» на некоторое время, чтобы убедиться, что вы знаете, где его замедление. – vimist

+0

Просьба ознакомиться с этим http://www.php.net/manual/en/mysqli.multi-query.php –

ответ

3

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

$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("Y-m-d H:i:s") . "'),"; 
} 
mysql_query($query); 
+1

Удалите последнюю запятую из '$ query', прежде чем вставлять ее в базу данных:' $ query = substr ($ query, 0, -1); ' –

0

Может быть что-то вроде этого?

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

вы протестировали это! Я думаю, что это не сработает! –

+0

@RohitKumarChoudhary Я пропустил запятую ... там ... – Repox

0

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

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

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