みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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++;
}

投稿日時 - 2009-02-05 13:35:48

QNo.4691303

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

さまざまなエラーの可能性が考えられますが
replaceValues()はユーザー関数ですよね?
きちんとそれぞれのデータがシングルクオーテーションで
くくられていますか?

$res = mysql_query($sql) or die(mysql_error());
でデバッグすると整理できるかもしれません。

投稿日時 - 2009-02-05 14:22:05

お礼

ご回答ありがとうございます!
ですがすみません。たった今、自己解決しました^^;

replaceValuesではエスケープしたり、シングルクォーテーションでくくったりといった処理が入っています。

原因はDBのカラムのバイト数が足りませんでした・・
修正後はちゃんとINSERTできたのですが、今度はINSERTされたものが文字化け;
その後調べたらmysql_query("SET NAMES UTF8;");を足せばよい事に気が付き、無事解決です!

投稿日時 - 2009-02-05 14:54:35

あなたにオススメの質問