【发布时间】:2012-05-23 20:26:34
【问题描述】:
我有一个从远程源读取数据的 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("Y-m-d H:i:s") . "')");
}
该脚本可以正常工作,但插入速度非常慢,正如我想象的那样,因为它写入了每条单独的记录。 count 变量是每个页面返回的记录数,page 变量是一个简单的页面计数器。
我想知道是否有办法执行批量插入语句来一次插入所有 100 条记录。
提前致谢。
【问题讨论】:
-
你确定是慢的
INSERT而不是cURL请求?尝试echo对页面进行一些超时,以确保您知道它在哪里变慢了。 -
您可以使用@magnetik、@chauhan 或@Repox 提供的代码在一次插入中添加多条记录。或者您可以使用准备好的语句,这将有助于防止 SQL 注入(或使用
mysql_real_escape_string)并预编译查询,这样如果您执行多个INSERT语句会更快。