2016-06-22 15 views
1

私はcodeigniterを使用しています。 csvファイルをDBにロードしようとしています。 $path = 'C:/xampp/htdocs/CodeIgniter-3.0.6/';SQL構文にエラーがあります。MariaDBサーバー+コードシグネイタ+ LOAD DATA INFILE

エラー:

A Database Error Occurred 

Error Number: 1064 

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Institution ID Code,Acquiring Institution Name,Service Indicator,Local Point of ' at line 5 

LOAD DATA INFILE "C:/xampp/htdocs/CodeIgniter-3.0.6/fichier/test3.csv" INTO TABLE atm_location FIELDS TERMINATED BY ";" LINES TERMINATED BY "\n" IGNORE 0 LINES (Acquiring Institution ID Code,Acquiring Institution Name,Service Indicator,Local Point of Service ID,Country Code,Administrative Region, Tourist Area,City/Town/Locality,Postal Code,Address,Location Name,Type of Location,Type of Access,Opening Hours,Opening Days,Card Programm Indicator,Opening Date,GPS Latitude,GPS Longitude) 

Filename: C:/xampp/htdocs/CodeIgniter-3.0.6/system/database/DB_driver.php 

Line Number: 691 

これは動作します:

$query = $this->db->query('LOAD DATA INFILE "'.$path.'fichier/test3.csv" INTO TABLE atm_location FIELDS TERMINATED BY ";"'); 

このdoens't作業(上記のエラーを与える):

$query = $this->db->query(' 
     LOAD DATA INFILE "'.$path.'fichier/test3.csv" 
     INTO TABLE atm_location FIELDS TERMINATED BY ";" 
     LINES TERMINATED BY "\n" 
     IGNORE 0 LINES 
     (Acquiring Institution ID Code,Acquiring Institution Name,Service Indicator,Local Point of Service ID,Country Code,Administrative Region, Tourist Area,City/Town/Locality,Postal Code,Address,Location Name,Type of Location,Type of Access,Opening Hours,Opening Days,Card Programm Indicator,Opening Date,GPS Latitude,GPS Longitude)'); 

ませ列が不足していません。 csvファイルに列名がありません。 DBには、ここに書き込むのと同じ列名があります。私は明らかにxamppを使ってlocalhostで作業しています。

答えて

0

私は問題があなたの列名に空白であると仮定します:

(Acquiring Institution ID Code,Acquiring Institution Name,Service Indicator,Local Point of Service ID,Country Code,Administrative Region, Tourist Area,City/Town/Locality,Postal Code,Address,Location Name,Type of Location,Type of Access,Opening Hours,Opening Days,Card Programm Indicator,Opening Date,GPS Latitude,GPS Longitude)' 

バッククォート彼らと再び試してみてください。将来的には

(`Acquiring Institution ID Code`,`Acquiring Institution Name` .... 

を、列名の空白を避けます。名前をすべて小文字にすることは良いアドバイスです。

+0

ありがとう、私はスペースが問題であったことを知らなかったし、\ 'の存在を知らなかった。 \ 'と\ 'の違いは何ですか?彼らは同じことをしますが、imbricationを許可しますか? – Firefly

+0

Bactickは、mysqlの識別子(テーブル名、カラムなど)の引用符です。一重引用符と二重引用符は、文字列、文字、時間の文字列表現の値を引用するために使用されます。 – Ray

+0

二重引用符も識別子引用符にすることができる 'ANSI_QUOTES'を有効にできますが、バッククックに。それはあなたがいつも逆戻りした名前が識別子であることを常に知っているので、それをあまり混乱させません。また、あなたのクエリがansi引用符がオフになっているシステムで動作することを保証できません – Ray

関連する問題