• 締切済み

PHP+mySQLでのCSV→DB登録で文字化けします

現在タブ区切りのCSVファイルをPHPで取り込み mySQLへINSERTするものを作ろうとしているのですが INSERTするモノに全角が入ると文字化けているせいか mysql_queryでFALSEが帰ってきてしまいます。 使用環境、コードを以下に書きます。 どこかおかしな点等ありましたらご教授お願い致します。 OS:windowsXP PHP:Ver5.2.6、default_charset UTF-8 mysql:Ver5.0.51a UTF-8 取り込みたいCSV:Shift_JIS,CRLF,タブ区切り コード(一部) while(!feof($fp)){ $buf = fgets($fp); $buf = mb_convert_encoding($buf, "UTF-8", "Shift_JIS"); $buf=str_replace('\r\n', '\n', $buf); $array = preg_split("/\t/", $buf); if($array[0] == "") { break; } else { //INSERT用に加工( $values = replaceValues($array); } $sql = "INSERT INTO table_name VALUES($values)"; $res = mysql_query($sql); if(!$res){ echo "登録に失敗しました。"; echo "sql:".$sql; mysql_close($conn); exit; } $cnt++; }

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

さまざまなエラーの可能性が考えられますが replaceValues()はユーザー関数ですよね? きちんとそれぞれのデータがシングルクオーテーションで くくられていますか? $res = mysql_query($sql) or die(mysql_error()); でデバッグすると整理できるかもしれません。

kuruje
質問者

お礼

ご回答ありがとうございます! ですがすみません。たった今、自己解決しました^^; replaceValuesではエスケープしたり、シングルクォーテーションでくくったりといった処理が入っています。 原因はDBのカラムのバイト数が足りませんでした・・ 修正後はちゃんとINSERTできたのですが、今度はINSERTされたものが文字化け; その後調べたらmysql_query("SET NAMES UTF8;");を足せばよい事に気が付き、無事解決です!