• 締切済み

お世話になります。

お世話になります。 CSV取り込みに関しての質問です。 以下の記述したphpファイルにてCSVの取り込みを行ったのですが、 $ld="LOAD DATA INFILE 'filepass/test.csv' INTO TABLE tablename FIELDS TERMINATED BY ',' "; $ld2=mysql_query($ld); $inita=True; 読み込みが出来ません。 エラー文など一切出ません。 CSVファイルの場所は問題ありません。 またmysqlのテーブルのフィールド数も問題ないと思います。 mysqlへのログインも問題ないと思います。 何が問題か正直それすら思い浮かばず質問致しました。 何が原因で読み込みが出来ないのでしょうか? 思い当たることは一通り試しました。 どうかよろしくお願い申し上げます。 mysql ver 5.0.51a

  • MySQL
  • 回答数2
  • ありがとう数5

みんなの回答

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.2

私も以前はまりましたが、php プログラムソースからみた相対パスのファイルを読み込む時は、local指定が必要です LOAD DATA local INFILE 'filename' /* 以降省略 */ あと、phpからのSQLエラーチェックは、mysql_error() で取得する必要があります。

hajimete-san
質問者

補足

ご回答ありがとうございます。 同じことを経験なされたのですね、頼もしいです! ファイルの指定についてはフルパスで記述しました。 エラーチェックはまだ行っておりませんが、 phpmyadminから行ったところ以下のメッセージが出ました。 #1366 - Incorrect string value: '\x95{\x92\x86\x93X' for column 'hoge' at row 1 何か良い解決策がありましたら、ぜひ御教えいただければ幸いです。 自分も探します。 よろしくお願いします。

  • moousi
  • ベストアンサー率70% (21/30)
回答No.1

コンソール上(あるいはphpMyAdmin)で、load data infile文を発行したら、エラー内容が分かるのではないでしょうか。 show errors; show warnings; ちなみに、ファイル名指定が相対パス指定でありますと、my.cnf(my.ini)のdatadir配下のものを探しに行きます。

hajimete-san
質問者

補足

ご回答ありがとうございます。ファイル記述はフルパスで行っております。 phpmyadminにて行ったところ以下のメッセージが出ました。 #1366 - Incorrect string value: '\x95{\x92\x86\x93X' for column 'hoge' at row 1 調べてみましたところ、キャラクターセットに関するエラーらしいのですが・・ csvファイルを読み込ませる際にエンコードさせる必要があるということでしょうか? サーバの文字セットはUTF-8 ファイルはS-jis 何か良い解決策がありましたら、御教えいただければと思います。 私も探してみます。

関連するQ&A

  • exec関数の中に変数を入れたい

    CSVファイル(kabu.csv)をmysqlに記録すべく下記のPHPを組みました。 PHPのexec関数の中で、MySQLを動作させます。 下記でPHPファイルと同じ階層にあるkabu.csvをMySQLにインサートすることが可能でした。 <?php try { $con = new PDO("mysql:host=127.0.0.1;dbname=db", "root", "password", array(PDO::MYSQL_ATTR_LOCAL_INFILE => 1)); $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $con->exec('load data local infile \'kabu.csv\' IGNORE INTO TABLE photo_in fields terminated by \',\' enclosed by \'"\' escaped by \'"\''); } catch (PDOException $e) { echo $e->getMessage(); } ?> ********************************************************************************* 次に、 \'kabu.csv\'を外に出しました。($file = 'kabu.csv';) (将来的にこのkabu.csvはクエリーと連動して名前をが変わるようにする予定です。) ********************************************************************************** <?php $file = 'kabu.csv'; try { $con = new PDO("mysql:host=127.0.0.1;dbname=db", "root", "password", array(PDO::MYSQL_ATTR_LOCAL_INFILE => 1)); $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $con->exec('LOAD DATA LOCAL INFILE $file IGNORE INTO TABLE photo_in fields terminated by \',\' enclosed by \'"\' escaped by \'"\''); } catch (PDOException $e) { echo $e->getMessage(); } ?> 単純に \'kabu.csv\'を$fileに置き換えただけではうまく動作しません。(MySQLに入力されません) どのように記載すれば、作動するでしょうか? 初歩的な質問かと思いますが、よろしくお願いいたします。 環境はCentOS 6.6 + MySQL5.6 です。エラーは下記となります。  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 '$file IGNORE INTO TABLE photo_in fields terminated by ',' enclosed by '"' escape' at line 1

    • 締切済み
    • PHP
  • pathを指定してCSVをインポートしたい

    すいません1つ質問があります。 こちらのサイトでCSVのファイルのインポート方法を勉強していますが、下記の方法だとあらかじめ、データベースが格納されているフォルダにCSVを置いてある前提でこのやり方をやります。 LOAD DATA INFILE "T01Prefecture.csv" INTO TABLE T01Prefecture FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n"; 僕が知りたいのは、例えば、 C:\Users\Ken\Desktop\T01Prefecture.csv ここに置いてあるCSVを指定してインポートしたいと考えています。 そのやり方がどうもこのパスを書くだけでは出来ないです。 どなたかやり方を教えて頂けますか? 僕が書いたのは下記の通りです。 LOAD DATA INFILE "C:\Users\Ken\Desktop\T01Prefecture.csv" INTO TABLE T01Prefecture FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n"; よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLに100万件登録する最も効率の良い方法

    A(600)xB(800)xC(3)で144万件の作成してMySQLへ登録したい のですが、最も効率良く登録する方法は何でしょうか? 私がとりあえず思いつくのは、下記2つのうち案2)です。 案1)プログラム&MySQL 1.PHPなどのプログラムのループ処理でテストデータを作成 2.mysql>LOAD DATA INFILE "/path/to/file.csv" INTO TABLE tablename FIELDS TERMINATED BY ","; 懸念点:メモリが足りず小分けにしないとインポートできなそう。 案2)プログラムのみ 1.PHPなどのプログラムのループ処理でテストデータを作成し、   1つのINSERT文で、1000件ぶんを一気にコミット 例:INSERT INTO table (a,b,c) VALUES (1,1,1),(1,1,2)・・・

  • LOAD DATA INFILE の使用について

    サーバにある、CSVファイルをデータベース(mysql)に登録したいです。 $query = "LOAD DATA INFILE '[ファイル名]' INTO TABLE [テーブル名] FIELDS TERMINATED BY ','"; を $result = mysql_query($query); として実行すると、 Access denied for user 'user'@'%' (using password: YES) というエラーになります。 色々検索すると、ユーザーはrootユーザーでないといけない・・・というのを見かけたのですが・・・ 普通のユーザーではLOAD DATA INFILEを使用できませんか? 私は、レンタルサーバを使用していて、レンタルサーバ上からしかユーザーを追加できません。 この場合、LOAD DATA INFILE~ は使用できないのでしょうか? また、もし使用できない場合、代替手段はあるのでしょうか?

    • ベストアンサー
    • PHP
  • CSVファイルをMYSQLにインポート

    先日からMYSQL+PHPの勉強をはじめました。 データベース構築の際、以前作成したCSVファイルをMYSQLのテーブルとして 利用したいと考えております。 そこで、MYSQLコマンドより、 LOAD DATA LOCAL INFILE 'ファイル名.csv' INTO TABLE テーブル名 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'; Query OK, 0 rows affected (0.04 sec) Records: 102 Deleted: 0 Skipped: 102 Warnings: 0 とCSVファイル自体が悪いのかSQL文に問題がるのかインポートがうまくいきません。。 ちなみにCSVは  0,2011/6/2 0:00,80.94,81.32,80.55,80.92 0,2011/5/25 0:00,81.94,82.17,81.8,81.95 0,2011/5/23 0:00,81.77,82.04,81.32,81.99 環境はphpdevで一括でインストールした phpadmin: バージョン2.3.2 MYSQL: MySQL4 apache: 1.3.27 初心者で基本的な質問かもしれないですがどうかご教授お願いします。

    • ベストアンサー
    • MySQL
  • CSVファイルを毎日、全レコード一括更新したい

    毎日、CSV形式で送られてくる最新のデータがあります。 それを自動的にMySQLに一括で追加・更新したいと考えています。 CSVファイルは毎日、データが追加されたり、UPDATEされたり、削除されたりしています。そのCSVファイルのデータを神様DBとして、上書きしたいと思っています。 つまり、前日のMySQLのデータを本日のデータで完全に上書きしたいと考えています。 単にデータをロードするだけなら mysql> load data infile "ファイルパス/ファイル名.csv" -> into table テーブル名 fields terminated by "," lines terminated by "\n"; でよいと思いますが、完全上書きの方法がよくわかりません。 それとも、上記方法で同じことを2度すると完全に上書きされるのでしょうか?同じレコードが2つ出来上がるのでしょうか?それともマージされるのでしょうか? もし、お分かりでしたらご教授ください。

    • ベストアンサー
    • MySQL
  • mysqlについての質問です。

    macbook air の mountaion lion を使用しています。 csvファイルをmysqlのコマンドラインから呼び込もうとすると mysql> load data infile "file://localhost/Users/uekikouji/excel/t.csv" into table tb1N fields terminated by ','; ERROR 13 (HY000): Can't get stat of '/usr/local/var/mysql/file:/localhost/Users/uekikouji/excel/t.csv' (Errcode: 2) と表示されます。なにが原因でしょうか悩んでいます。よろしくお願いします。

    • ベストアンサー
    • MySQL
  • BAT処理でCSVデータのインポート

    よろしくお願いしますm(__)m 昨日から調べて作ってみたのですがうまく動かず、 MYSQLが強制終了してしまうこともありました(T_T) 疲れました・・・ ※test.batに以下の内容を書きました c:\mysql\bin\mysql -u **** -p**** < test.sql ※test.sqlに以下の内容を書きました LOAD DATA INFILE "c:\mysql\test.csv" INTO TABLE 商品管理.商品単品 FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY "" ESCAPED BY "\\" LINES STARTING BY "" TERMINATED BY "\n" ※test.csvはカンマ区切りになっています。 ファイルは【test.bat】【test.sql】【test.csv】とも c:\mysqlに置いています。 この状態でtest.batを実行するとDOS窓が一瞬現れて消えて しまいます。 間違っているところやヒントなどあれば教えてくださいm(__)m

    • ベストアンサー
    • MySQL
  • PHP+MySQL でのcsvファイルインポート

    PHP + MySQL で、他システムから出力されてきたcsvファイルをテーブルへインポートしたいと考えています。 LOAD DATA INFILE で取り込もうとしていますが、対象のcsvファイルの特徴のためにうまく行かず苦戦しています。 取り込みたいファイルは、以下のようになっています。  ・各フィールドが "(ダブルクォート) で囲まれている  ・各フィールドは ,(カンマ) で区切られている  ・金額の項目には、桁区切りのカンマが入っている  例) "0001","あああああ",…(中略)…,"105,000","100,000","5,000",…     コード 項目名            税込み  税抜き 消費税  というような形です。    困っているのは、金額に使われている、桁区切りのカンマの処理についてです。  目的としては、データベースへ取り込むときには 105,000 は 105000 として取り込めればいいのですが、他システムから、桁区切りがなされた状態でcsvが作成されてきています。 LOAD DATA INFILE test.csv INTO TABLE data_table FIELDS TERMINATED BY ',' ENCLOSED BY '\"' IGNORE 1 LINES;  各項目のダブルクォートはENCLOSED BY で、項目を分けるカンマはTERMINATED BYで処理できていると思うのですが、金額の区切りに使われているカンマと項目の区切りのカンマを区別させられずに苦戦しています。  事前にcsvを加工するのも考えてはいるのですが、なるべくcsvを加工せずにそのまま取込したいと思います。  何か、簡単に回避できる方法等があればご教示願います。  宜しくお願いします。

    • ベストアンサー
    • PHP
  • LOAD DATA LOCAL INFILE

    LOAD DATA LOCAL INFILE を使ってmysql にcsv からデータを挿入したいのですが #1148 - The used command is not allowed with this MySQL version とエラーが出てきます。※エラー情報はmyphpadminから得ています。 以下の文を実行しています。 ※他のサーバーで動いているので、ソースに間違いはないと思います。 ※サーバーの引っ越しで出てきた不具合ですが、以前何かをしたかは覚えていません。。。 LOAD DATA LOCAL INFILE '/パス/data.txt' REPLACE INTO TABLE data fields terminated by ',' ENCLOSED BY '"' LINES TERMINATED BY ' ' 権限を付与すれば良い、と言う記事を読んだのですが 具体的にはどのような事をしたらいいのでしょうか? FTPでファイルをアップロードして、php を実行しています。 MySQL 5.1.73 PHP 5.3.3 よろしくお願いいたします。

    • 締切済み
    • PHP