2010-05-14 5 views

답변

0

MySQL documentation에서 인용 :

부하 데이터 INFILE 문은 매우 높은 속도로 테이블에 텍스트 파일에서 행을 읽습니다. 파일 이름은 리터럴 문자열로 지정해야합니다.

즉, 준비된 명령문의 매개 변수가 될 수 없습니다. 그러나 문장이 PHP 코드의 문자열 일 때 문자열 삽입을 금지하는 사람은 없습니다.

0

스크립트에서 사용할 수 있는지 묻는다면; 당신은 PHP와 같은 몇 가지 일을 수행 할 수 있습니다 스크립트가 단지 대신 $ 호스트 $의 URI의 $ 파일 이름을 파일 이름 $ 사용할 때 파일이 같은 폴더에

<?php 
$mysqli = new mysqli("host", "user", "pwd", "db"); 
/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 


$sql = "CREATE TABLE number1 (id INT PRIMARY KEY auto_increment,data TEXT)"; 
if ($result = $mysqli->query($sql)) { 
} else { 
printf("<br>%s",$mysqli->error); 

} 

$host = $_SERVER['HTTP_HOST']; 
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); 
$filename = "data.csv"; 

$sql = "LOAD DATA LOCAL INFILE '$host$uri$filename' INTO TABLE number1"; 
if ($result = $mysqli->query($sql)) { 

} else { 
printf("<br>%s",$mysqli->error);  
} 
// Close the DB connection 
$mysqli->close(); 

exit; 
%> 

합니다. 내가 사용하고있는 몇 개의 스크립트에서 이것을 빠르게 정리했다. 디버깅 없이는 작동하지 않는다면 유감스럽게 생각하지만 꽤 가깝다. 그것은 mysqli가 필요합니다.

2

또는 파일 (BATCH 예)의 임시 복사본을 만들 수 있습니다

LOAD_DATA을 (정보)

COPY %1 TempFileToLoad.csv 
mysql --user=myuser --password=mypass MyDatabase < ScriptLoadMyDatabase.sql 
DEL TempFileToLoad.csv 

박쥐는 SQL :

ScriptLoadMyDatabase.sql

load data infile 'TempFileToLoad.csv' IGNORE 
into table tLoad 
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' 
lines terminated by '\r\n' 
IGNORE 1 LINES 
(@DateCrea, NomClient, PrenomClient, TypeMvt, @Montant, NumeroClient) 
set DateCrea = str_to_date(@DateCrea, '%Y-%m-%d'), Montant = (round(@Montant/1000)*2) ; 

그리고 BAT 파일에 대한 링크를 SendTo windows 폴더에 넣으려고합니다.

관련 문제