본문 바로가기
MySql

MySQL PHP 대량 삽입 foreach

by 베이스 공부 2021. 2. 10.
반응형

원격 소스에서 데이터를 읽는 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 변수는 각 페이지에 대해 반환되는 레코드 수이며 페이지 변수는 간단한 페이지 카운터입니다.

한 번에 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);

 

참조 페이지 https://stackoverflow.com/questions/10615762

 

 

반응형

댓글