2012-05-16 56 views
4

我有一個捲曲腳本從遠程源讀取數據。下面是當前的代碼:PHP批量插入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條記錄的批量插入語句。

在此先感謝。

$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

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

+1

你確定它的'INSERT'慢,而不是'cURL'請求嗎?試着'回聲一些時間到頁面,以確保你知道它放緩的地方。 – vimist

+0

請仔細閱讀http://www.php.net/manual/en/mysqli.multi-query.php –

回答

3

你可以做一些像這樣的語句內做到這一點?

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)); 
+1

在將其插入數據庫之前,從'$ query'中刪除最後一個逗號:'$ query = substr($ query,0,-1);' –

0

也許是這樣的:

+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');