レンタルサーバでMYSQLにデータが全て入らない

このQ&Aのポイント
  • さくらレンタルサーバを使っている際に、郵便番号CSVからMYSQL5.1にデータをインサートする際に全件が入らない状況が発生しています。
  • セーフモードを調べましたが、オフになっているため、他の原因が考えられます。
  • 以前同じサーバを借りていた時には正常にデータがインサートされていたことから、原因を特定し解決したいです。
回答を見る
  • ベストアンサー

レンタルサーバでMYSQLにデータが全て入らない

お世話になります。 さくらレンタルサーバを使っているのですが 郵便番号CSVからMYSQL5.1にデータを インサートしているのですが全件はいりません。 ソースはこんな感じです。 set_time_limit(0); //csv-open if (!($file = fopen("KEN_ALL.CSV","r"))) { die("file-open-err"); } else { //csvを読込 while (!feof($file)) { //変数に格納する $filewk = fgets($file, 1024); //配列に格納する $fileArray = explode(",",$filewk); //配列の内容からダブルクォーテーションを取り除く for($i=0; $i<count($fileArray); $i++){ $fileArray[$i] = str_replace('"', '', $fileArray[$i]); } //insertSQL $strsql = ""; $strsql .= "insert into ziptb (zipno,kenname,shiname,choname) "; $strsql .= " values(" . "'" . cnvToutf($fileArray[2]) . "'" . ","; $strsql .= "'" . cnvToutf($fileArray[6]) . "'" . ","; $strsql .= "'" . cnvToutf($fileArray[7]) . "'" . ","; $strsql .= "'" . cnvToutf(charCnv($fileArray[8])) . "')"; $obj = new exeQuery; //データインサート if (!$obj -> exeProc($strsql)) { die("insert-err"); } } fclose ($file); } 以前同じサーバを借りていた時はこれで 通ったのですが、セーフモードを調べたのですが オフになっているみたいなのですが、 宜しくお願いいたします。 }

noname#127172
noname#127172
  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • papa987
  • ベストアンサー率19% (21/106)
回答No.1

CSVデータならphpmyadminでテーブルへインポート簡単にできますよ。 さくらなら標準でphpmyadminインストールされてて コントロールパネルからアクセスできます。

noname#127172
質問者

お礼

有難うございました。 無事解決しました。

関連するQ&A

  • fortranでデータの抜き出しをしたい

    プログラムは、ド素人ですが急用です。 以下のようなCSVファイルがあります。 ido,keido,point 134.603057155416,34.1005169871047,1.07 134.603270155368,34.1005169871253,0.9 134.603499155317,34.1005129871483,0.76 134.603713155269,34.100512987169,0.54 134.604354155125,34.1005059872324,0.19 134.604567155077,34.100505987253,0.39 134.604796155026,34.100501987276,0.44 このようなものが100000個続く。 _________________________ データ数が100000個があります。 これらから、例えば、0以上0.5未満でido,keido,pointを 抜き出して、新たなCSVファイルを形成したいのです。 上の中なら、 134.604354155125,34.1005059872324,0.19 134.604567155077,34.100505987253,0.39 134.604796155026,34.100501987276,0.44 だけが抽出されたものです。 イメージとしては、(ファイル名は適当です。) OPEN (5,FILE='motod.csv', status='old') OPEN (5,FILE='newd.csv') do 10 i=1,100000 READ(5,*) ido,keido,atai IF(atai.GE.0.00).and.IF(atai.LT.0.50)then WRITE(5,*)ido,keido,atai 10 continue   stop END になりますが、配列などが必要な気がします。 新たにお示しいただくか、継ぎ足したプログラムをお示しください。 また、今後のために参考になりそうなサイトもご紹介いただけると 幸いです。 空白がおかしいところがあろうかと思いますが、 よろしくお願いいたします。

  • MYSQLからCSVへの書き込み方法

    MYSQLからCSVへの書き込み方法で質問があります。 下記のコードを記載しましたが DBのデータ件数分の改行しか出力されませんでした。 ブラウザ上でecho動作させた際には、 echo "<p>CSVファイルにセットされるデータ:".$string; でしっかりデータが設定されていました 何が悪いですか? ////////////////////////////////////////////////////////////////// // DBからCSVファイル書き込み(全件新規) // $file_name:csvファイル名 ////////////////////////////////////////////////////////////////// function DB_csvSet($file_name, $dbhost=DBHOST, $dbuser=DBUSER, $dbpass=DBPASS, $dbname=DBNAME) { print "DB_csvSet start"; // MySQL 接続 if (!($cn = mysql_connect($dbhost, $dbuser, $dbpass))) { die("DB_csvSet Error: mysql_connect"); } //MySQLのクライアントの文字コードをsjisに設定 mysql_query("SET NAMES sjis") or die("can not SET NAMES sjis"); // MySQL DB 選択 if (!(mysql_select_db($dbname))) { die("DB_csvSet Error: mysql_select_db"); } // MySQL 問い合わせ $sql = sprintf("select * from %s", TABLE_NAME); if (!($rs = mysql_query($sql))) { die("DB_csvSet Error: mysql_query"); } // ファイルを新規モードで開く $file = fopen($file_name, "w") or die("OPENエラー $file_name"); // ファイルをロックする flock($file, LOCK_EX); // MySQL レコード参照 while ($item = mysql_fetch_array($rs)) { printf("id=%s ", $item[ITEM_ID]); printf("name=%s ", $item[ITEM_NAME]); printf("point=%s<BR> ", $item[ITEM_POINT]); // 3つの変数から配列を作成する $array = compact($item[ITEM_ID], $item[ITEM_NAME], $item[ITEM_POINT]); // $array = compact("id","name","point"); // 配列のデータをカンマで区切って結合する $string = implode(",", $array); // 結合された文字列を表示する echo "<p>CSVファイルにセットされるデータ:".$string; // データを書き込む fputs($file, $string."\n"); } // ロックを解除する flock($file, LOCK_UN); // ファイルを閉じる fclose($file); // MySQL 切断 mysql_close($cn); // 正常終了 print "正常終了"; }

    • 締切済み
    • PHP
  • (レンタルサーバ)大量データで500エラー

    初めて投稿させていただきます。 現在、勉強もかねてロリポップというレンタルサーバーで PHPのプログラムを作成しております。 プログラムの概要は、以下の通りです。 1)CSVファイルを[テーブルA(MySQL)]へinsert。 2)[テーブルA(MySQL)]から対象レコードをselectし、 処理1を実行した結果を[テーブルB]へinsert。 3)[テーブルA]と[テーブルB]と結合したテーブルから対象レコードをselectし、処理2を実行した結果を[テーブルC]へinsert。 上記プログラムを実行する際に、以下の事象が発生し、困っております。 ・CSVファイルの内容が300行だと正常に処理が終了する。 ・CSVファイルの内容が400行だと、「500 internal server error」が発生する。 実行環境は以下の通りです。 ・ロリポップサーバーのロリポプラン (ディスク容量:50GB) 「500 internal server error」について検索すると「パーミッションの設定」が関係するようなので 推奨値である「600」やデフォルトである「644」の両方で実行いたしましたが どちらも同じ結果でした。 また、try~catchで各処理をかこっていますが、PHPのエラーは出ていません。 CSVファイルの行数を300から400に増やすと起こるので データ量が関係するのではないか、と考えております。 プログラムのエラー(不具合)か、否かを確認する方法はありますでしょうか? また、データ量が問題の場合、どのような回避策がありますでしょうか? CSVファイルを300行までしか読み込まないような制約を付けることも考えましたが プログラム的に可能なロジックがあれば、ご教示いただきたく思います。 ロリポップサーバのプランを上げることも考えましたが それでも、ファイルの読み込みには上限があるでのはないかと考えております。 何卒、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Perlでのファイル入出力、処理方法

    メモ帳で以下のようなプログラムを書きました。(file_1.plで保存しました) #!/usr/bin/perl $file="data.csv"; $cityfile="name.txt"; $outfile="data_out.csv"; open (IN, $file) or die "$!"; open (FILE, $file) or die "$!"; open (OUT, ">$outfile") or die "$!"; @city = <FILE>; ・ ・ ・ これをCygwinコマンド上で、 perl file_1.pl と入力し、Enterを押すと「No such file or directory at file_1.pl line 9.」と表示されます。 line9はopen (FILE, $file) or die "$!";という文です。 どこが間違えで、どのように修正すればよいのでしょうか。 よろしくお願いします。

  • 【PHP】csvファイルへの書き出し(1行追加or1行上書き)について

    【PHP】csvファイルへの書き出し(1行追加or1行上書き)について はじめて利用させていただきます。 現在、PHPにて書き出し処理を作成している者ですが、csvファイルへの書き出しの際に先頭行にスペースが大量に入ってしまい、困っています。 自分なりに調べてみたのですが、原因がわかりません。詳しい方からのアドバイスをお願いしたいです。 【行っている処理】 1.csvファイルを1行ずつ読み込み、配列に格納 2.既存のデータに同じ名前の人が存在する場合は、その行の配列の内容を変更(存在しない場合は配列の末尾に1件追加) 4.現在ファイルにあるデータを削除(丸めこみ)し、配列データを書き書き出し 【ソース】(書き出し処理に問題があると思ったため、それ以外の部分は割愛させていただきます) <?php $filename = 'data.csv'; $file = fopen($filename, "r+" ); $name = array(); if(flock($file,LOCK_SH)){ while( $data = fgetcsv( $file, 1000, "," ) ) {   //配列に格納 } //配列の内容変更or新規に一行追加処理 //現在のファイル内のデータを削除(まるめこみ) ftruncate($file, 0); //1行分のデータをカンマ区切りで結合し、書き出し for($i = 0; $i < $count; $i++){ $ins = $name[$i]; $ins .= ','; $ins .= $number[$i]; //書き込み失敗時のエラー if(fwrite($file, "$ins\n" ) === FALSE){ print("ファイル書き込みに失敗しました"); }else{ //処理なし } } //ファイルロック解除 flock($file, LOCK_UN); }else{ print("ファイルロックに失敗しました"); } 【csvファイルの中身(処理実行前)】 佐藤,1234 田中,12345 中村,9876 【csvファイルの中身(処理実行後)】                       佐藤,1234 田中,12345 中村,9876 以上です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 別のファイルにあるレコードを各配列に格納したいです

    ファイル"DATA.dat"にあるレコードを配列"Record"にそれぞれ格納するプログラム考えてみましたが、なかなか動いてくれません。何かアドバイスをください。 DATA.datの内容 0001 0010 0011 0100 0101 : : Record配列にレコードを格納するイメージ Record[0] <- 0001 Record[1] <- 0010 Record[2] <- 0011 Record[3] <- 0100 Record[4] <- 0101     :     : 考えたプログラム #include <stdio.h> #include <stdlib.h> void main() { FILE *File_pt; char Record[100]; int i; //TimeLineファイルをOpenする if ( (File_pt = fopen("DATA.dat", "r")) != NULL){ for(i = 0 ; i < 5 ; i++){ if( (fscanf(File_pt, "%s", Record[i])) == EOF){ printf("各レコード格納失敗\n"); exit(1); } } //////格納されたレコードを表示する for(i = 0 ; i < 5 ; i++){ printf("%s\n",Record[i]); } fclose(File_pt); }else{ printf("失敗\n"); exit(1); } } まだ初心者なんでおねがいします。

  • MySQLにバイナリデータを正常に保存できない

    ローカルに保存してあるファイルをMySQLにバイナリデータとして格納して保存したいと思ってます。 データは格納できるのですが、文字エンコード?の問題でファイルが壊れてしまっているみたいです。 格納後、出力した際にjpgなどの画像は問題なく表示されるのですが、xlsやpdfなどのファイルが開けなくなります。MySQLの文字コードはUTF8です。 #!/usr/bin/perl use DBI; my $dbh = DBI->connect('DBI:mysql:database:localhost:3306', 'user', 'password'); # ファイルパス my $file = '/tmp/test.xls'; # ファイルサイズ my $size = -s $file; # バイナリデータ読み込み my $line; open(IN, $file); binmode(IN); sysread(IN, $line, $size); close(IN); # DBに格納 my $sth = $dbh->prepare(qq|INSERT INTO file_table ( `file_name`, `file_data` ) VALUES (?, ?)|); $sth->execute('test.xls', $line); $dbh->disconnect; 上記のようなコードなのですが、おかしな点があれば教えてください。 よろしくおねがいします。

    • ベストアンサー
    • Perl
  • ディレクトリ内CSVデータをすべてまとめる

    スクリプトの存在するディレクトリ /home/XXXX/XXXX/log.pl(完全に固定のディレクトリ) csvファイルの存在するディレクトリ /home/XXXX/XXXX/XXXX/****/YYMMDD.csv(Xは固定*は不定) crontabでCSVファイルを /home/XXXX/XXXX/XXXX/****/ 内のcsvをすべて読み込み時間が古いものを下に 新しい物を上にして /home/XXXX/XXXX/XXXX/****/fix.csv として新たなファイルを生成する。 既に読んだことのあるYYMMDD.csvファイルは再度 fix.csvに書き込まない 次のディレクトリがあるならばディレクトリ内のファイルを読み込み同様の動作をする 以前教えていただいたスクリプトを元にここまでできました。 logファイルに書き込まれている名前のファイルは読み込まないようにしたいのですが どのようにすればいいのでしょうか ▽▽以下スクリプト chdir'/home/XXXX/XXXX/XXXX/'; @files1=reverse(@files1); chomp(@files1); $file1=shift(@files1); until(("" eq $file1)){ @parts1=split(/\//, $file1); open(READLOG,"./$parts1[1]/log"); close(READLOG); open(READFILE,"<./$parts1[1]/$parts1[2]")||die "1$!"; @f1=<READFILE>; close(READFILE); @f=sort(@f1); open(WRITEFILE,">>./$parts1[1]/fix.csv")||die "3$!"; foreach $str (@f){ print WRITEFILE "$str"; } close(WRITEFILE); $file1=shift(@files1); #次のファイル名の取り出し open(BKFILE,">>./$parts1[1]/log")||die "3$!"; print BKFILE $parts1[2]."\n"; close(BKEFILE); } △△以上

    • ベストアンサー
    • Perl
  • CSVデータの同じファイルに上書きするには。

    CSV形式でデータdata.csvが書いてあります。プログラムを実行して、そのファイルの$data[4]の値が5という数字だった場合は、そこのセルだけ"解除"という文字に置き換えて(ほかに入ってる値ははそのまま)data.csvに上書きしたいのですが、どうもうまくいきません。したのように記述したのですが、どこが間違っているのかがわかりません。。どなたか教えてください。よろしくおねがいします。 #!/usr/bin/perl $file='data.csv'; open(FILE, "$file"); while(<FILE>){ @data = split(/,/, $_); } close(FILE); if($data[4] eq "5"){$data[4] = "解除";} open(OUT, ">$file"); print OUT @data; close(OUT);

  • VBSにてCSV読み込みし比較

    ある場所に比較するCSVファイルを2個格納しております。 ただしCSVファイル名は可変であります。 その場合 Set objTextA = objFSO.OpenTextFile("C:\" & "A.csv")と特定して呼び出せません。 名前が可変なときのため、そのパスにあるCSV2個を順に呼び出すにはどうすればよいのでしょうか。 また呼出し後、split関数により、配列に入れます。A配列とB配列に格納したとします。 一つ一つ比較していきたいのですが、 以下のような構文の場合、比較で違ったときテキストに書き込みとなりますでしょうか? for i=0 to i=10 step 1 if strcomp(a(i) ,b(i))) = 1 then テキストに書き込み endif next

専門家に質問してみよう