2013-08-07 4 views
2

CSV 파일의 첫 번째 행을 사용하여 데이터베이스를 만들려고했지만 내 PDO 구문에 대한 오류가 계속 발생합니다. 분명히 뭔가 $columns 변수에 VARCHAR (250)와 잘못된 것입니다 :PDO 호출을 통해 CSV 파일을 사용하여 데이터베이스 테이블 만들기

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'varchar(250))' at line 1

을 코드는 다음과 같습니다 :

<? 
/********************************************************************************/ 
// Parameters: filename.csv table_name 

$argv = 'seo_domains.csv seo_domains'; 

if($argv[1]) { $file = $argv[1]; } 
else { 
    echo "Please provide a file name\n"; exit; 
} 
if($argv[2]) { $table = $argv[2]; } 
else { 
    $table = pathinfo($file); 
    $table = 'seo_domains'; 
} 

/********************************************************************************/ 
// Get the first row to create the column headings 

$fp = fopen('seo_domains.csv', 'r'); 
$frow = fgetcsv($fp); 

$ccount = 0; 
foreach($frow as $column) { 
    $ccount++; 
    if($columns) $columns .= ', '; 
    $columns .= "$column varchar(250)"; 
} 

$qry = $dbcon->prepare("CREATE TABLE if not exists $table ($columns);"); 
$qry->execute(); 

/********************************************************************************/ 
// Import the data into the newly created table. 

$file = $file; 
$qry = $dbcon->prepare("load data infile '$file' into table $table fields terminated by ',' ignore 1 lines"); 
$qry->execute(); 
?> 

내가 대신 $file을 사용하는 정적 값으로 $fp fopen을 변경 분명히 있기 때문에 위에서 언급 한 코드를 코딩 한 사람은 변수를 포맷하는 방법을 언급하지 않았습니다. 예, 이미 첫 번째 행에서 "매개 변수"주석에 따라 서식을 지정했지만 아직 사용하지 않았습니다. 또한 변수가 제대로 분할되지 않아서 $table 변수를 'seo_domains'변수에 정적으로 변경했습니다. 위의 코드를 다시 코딩하는 대신, 필자는 왜 내 데이터베이스가 설명 된 오류가 발생하는지에 대한 생각을 가진 사람이 있는지 궁금합니다. 어떤 도움을 주셔서 감사합니다. 제공된 CSV 파일의 첫 번째 행을 기반으로 테이블을 만들려고합니다. 작성시 평소와 같이 CSV에 1 행 아래의 모든 행 값을 계속 삽입하고 싶습니다.

+0

마지막 CREATE TABLE이없는 경우 $ table ($ columns) ' –

+0

에코를 에뮬레이션 할 수는 있지만 PDO 준비 문을 반향 출력 할 수는 없습니다. 다음은 결과입니다 : '$ STMT = 'CREATE TABLE이 없으면'$ table. ' ('. $ columns.'); '; echo $ STMT. '
'; 결과 :'CREATE TABLE이 없으면 o 도메인 varchar (250), 서버 varchar (250), IP varchar (250), 사용자 이름 varchar (250), 암호 varchar (250), 이름 서버 varchar (250) 250), NameCheap varchar (250), GA varchar (250), WMT varchar (250), SB varchar (250), GAW varchar (250), 메모 varchar (250), BlankField varchar (250)); ' 분명히 "CREATE TABLE가 존재하지 않는다면 o"가 올바르지 않습니다. "o"는 $ table을 다음과 같이 설정 한 것입니다. –

+0

'KEY VARCHAR (250)'을 생략하고'id int auto_increment' 시작 부분에 추가하십시오. –

답변

0

시도 :

CREATE TABLE if not exists seo_domains (Domain varchar(250), Server varchar(250), IP varchar(250), Username varchar(250), Password varchar(250), Nameserver varchar(250), NameCheap varchar(250), GA varchar(250), WMT varchar(250), SB varchar(250), GAW varchar(250), notes varchar(250), BlankField varchar(250), id INT KEY NOT NULL AUTO_INCREMENT varchar(250)); 
0

key는 SQL에서 reserved 단어입니다. 당신이 CSV에서 열 이름 중 일부는 당신이 그들을 탈출해야합니다 예약어가 될 수 있다는 것을 알 수 있습니다으로

enter image description here

아래 이미지를 참조하십시오. MySQL에서는 백틱이 사용됩니다. ie `key`

관련 문제