Ticket #2512: pdo_insert_zip.patch
File pdo_insert_zip.patch, 3.9 KB (added by nanasess, 10 years ago) |
---|
-
data/class/pages/admin/basis/LC_Page_Admin_Basis_ZipInstall.php
a b 161 161 $objQuery =& SC_Query_Ex::getSingletonInstance(); 162 162 163 163 // DB更新 164 $objQuery->begin();165 $this->lfDeleteZip();166 164 $this->insertMtbZip(); 167 $objQuery->commit();168 165 } 169 166 170 167 /** … … 232 229 $cntInsert = 0; 233 230 $img_cnt = 0; 234 231 235 $fp = $this->openZipCsv(); 236 while (!feof($fp)) { 237 $arrCSV = fgetcsv($fp, ZIP_CSV_LINE_MAX); 238 if (empty($arrCSV)) continue; 239 $cntCurrentLine++; 240 if ($cntCurrentLine >= $start) { 241 $sqlval = array(); 242 $sqlval['zip_id'] = $cntCurrentLine; 243 $sqlval['zipcode'] = $arrCSV[2]; 244 $sqlval['state'] = $arrCSV[6]; 245 $sqlval['city'] = $arrCSV[7]; 246 $sqlval['town'] = $arrCSV[8]; 247 $objQuery->insert('mtb_zip', $sqlval); 232 /* 標準実装が非常に遅いので Azure/WebMatrix 向けにチューニング */ 233 $begin = microtime(true); 234 235 try { 236 $dbh = new PDO('mysql:host=' . DB_SERVER . ';dbname=' . DB_NAME . ';port=' . DB_PORT . ';charset=utf8', DB_USER, DB_PASSWORD); 237 $dbh->beginTransaction(); 238 $dbh->exec('DELETE FROM mtb_zip'); 239 240 $sql = 'INSERT INTO mtb_zip (zip_id, zipcode, state, city, town) VALUES (?, ?, ?, ?, ?)'; 241 $stmt = $dbh->prepare($sql); 242 $line = file(ZIP_CSV_UTF8_REALFILE); 243 for($i = 0; $line[$i] != ''; $i ++){ 244 if (!($array = explode(",", $line[$i]))) { 245 continue; 246 } 247 $stmt->bindParam(1, ++$cntCurrentLine, PDO::PARAM_INT); 248 $stmt->bindParam(2, $array[2], PDO::PARAM_STR, strlen($array[2])); 249 $stmt->bindParam(3, $array[6], PDO::PARAM_STR, strlen($array[6])); 250 $stmt->bindParam(4, $array[7], PDO::PARAM_STR, strlen($array[7])); 251 $stmt->bindParam(5, $array[8], PDO::PARAM_STR, strlen($array[8])); 252 $stmt->execute(); 248 253 $cntInsert++; 249 }250 254 251 // $disp_line件ごとに進捗表示する 252 if ($cntCurrentLine % $disp_line == 0 && $img_cnt < IMAGE_MAX) { 253 echo '<img src="' . $img_path . 'graph_1_w.gif">'; 254 SC_Utils_Ex::sfFlush(); 255 $img_cnt++; 255 // $disp_line件ごとに進捗表示する 256 if ($i % $disp_line == 0 && $img_cnt < IMAGE_MAX) { 257 echo '<img src="' . $img_path . 'graph_1_w.gif">'; 258 SC_Utils_Ex::sfFlush(); 259 $img_cnt++; 260 } 261 SC_Utils_Ex::extendTimeOut(); 256 262 } 257 SC_Utils_Ex::extendTimeOut(); 258 } 259 fclose($fp); 260 261 echo '<img src="' . $img_path . 'space_w.gif">'; 263 $end = microtime(true); 262 264 265 echo '<img src="' . $img_path . 'space_w.gif">'; 266 } catch (PDOException $e) { 267 trigger_error($e->getMessage(), E_USER_ERROR); 268 } 263 269 ?> 264 270 </div> 265 271 <script type='text/javascript' language='javascript'> … … 270 276 document.open('text/html','replace'); 271 277 document.clear(); 272 278 document.write('<p>完了しました。<br />'); 273 document.write("<?php echo $cntInsert ?> 件を追加しました。< /p>");279 document.write("<?php echo $cntInsert ?> 件を追加しました。<?php echo ($end-$begin); ?> 秒かかりました</p>"); 274 280 document.write("<p><a href='?' target='_top'>戻る</a></p>"); 275 281 document.close(); 276 282 } … … 281 287 </body> 282 288 </html> 283 289 <?php 290 $dbh->commit(); 284 291 } 285 292 286 293 public function openZipCsv()