• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP経由でMYSQLに全角文字を格納するにあたって)

PHP経由でMYSQLに全角文字を格納する方法とは?

このQ&Aのポイント
  • PHP経由でMYSQLに全角文字を格納する方法を知りたい。全角文字が文字化けしてしまう問題が発生している。解決方法を教えてほしい。
  • MYSQLにPHPから全角文字を格納する方法について質問。mysql_escape_stringやmysql_real_escape_stringを使用しても文字化けしてしまう。
  • 初心者ですが、PHP経由で全角文字をMYSQLに格納する方法に悩んでいます。文字化けの問題が発生しており、解決策を探しています。

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

>その中のデータは色々な文字列が含まれるせいかうまく下記に記したソースではエラーがあちこちで出てしまいます ソースがShift_JISなら、プログラムコードとして読み込む時点で、エラーになるし文字化けになるしで対策が大変です。 ま、それぞれ問題となる文字にせっせとバックスラッシュ\を付けて回るか、 データは、csvファイルにでも書き換えて、プログラムとしてではなく、ファイルから文字列変数に直接読み込めば、プログラム解釈における上記問題は、なんとか解決できるでしょう。 phpやmysqlの文字コード設定が変更可能なら、なるたけShift_JISは使わず、eucかutf8にすべきでしょう。 また、文字列に'を含みたいのに、\でエスケープもせずに''で括ってたりしませんよね? $DATA[name] = '名前'ccc'さん'; // これはどの文字コードでも、プログラムとしてエラー $DATA[name] = '名前\'ccc\'さん'; //ok $DATA[name] = "名前'ccc'さん"; //ok あと、記載されたコードで気になるのは、この行 $tmp2 ってどこから出てきたのかな? $tmp[$i]の間違い? list($bbsid,$userid) = split("\t",$tmp2);

kofumatu
質問者

補足

ご解答頂きありがとう御座います。 $tmp2はこちらで不要コード消したらそうなってしまいました。 tmp[$i]で正解です。 EUCも考えたのですが、最初PHP自体も全く素人でして、最初の作りがシフトJiSだった為 全ソースを書換となるとそれこそ・・みたいな状況でしてそのまま運用する事にしたのです。 また$DATA[name]部分なのですが、データ内は\はつけておりません。 これはやはり書きこみ等があった時には強制的につけた方がいいのでしょうか?

その他の回答 (1)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

文字化けするのは、格納したときの文字コードと、取り出して表示するときの文字コードが異なるからじゃないのかな。 「'全角'文字'の様に真ん中の'」これはphpのコード内に記述している文字列でしょうか? それとも、$_POSTなどから得たものでしょうか? phpの書き方の方に問題がありそうです。ソースを提示してみて下さい。

参考URL:
http://php.s3.to/man/function.mysql-real-escape-string.html
kofumatu
質問者

補足

ご解答頂きありがとう御座いました。 データは元あったデータがphpファイルにて保存されており、それをincludeした物です。 元あったデータは $DATA[name] = '名前'; の様に保存してあります。 その中のデータは色々な文字列が含まれるせいかうまく下記に記したソースではエラーがあちこちで出てしまいます。 問題ない文字列であれば普通に動く様ですが・・ コードは現在シフトJISになっております。 お忙しい中ご解答ありがとう御座います。 お暇な時でいいので解決策がありましたら教えて下さい。m(__)m ソースは不要そうな部分は省いておりますが、下記になります。 $CONF_dbType = "mysql"; $CONF_dbUser = "user"; $CONF_dbPass = "pass"; $CONF_dbName = "name"; $CONF_dbHost = "localhost"; $db = mysql_connect($CONF_dbHost, $CONF_dbUser, $CONF_dbPass); //データベースに接続 userネーム mysql_select_db($CONF_dbName,$db); //実行するデータベース名の選択 DBネーム include("../config.php"); $tmp = file("../list.cgi"); // $tmpに全改行コード等を含めたデータが入る $end = count($tmp); for ( $i = 0 ; $i <= $end ; $i++) { list($bbsid,$userid) = split("\t",$tmp2); $userid = trim( $userid, '\n' ); $data_php = "$data_dir/data.php"; if(!is_readable($data_php)){ continue; } include($bbs_php); $DATA[name] = mysql_real_escape_string($DATA[name]); $adddata = "INSERT INTO bbs_set_data( userid ,id, genre, type, name) VALUES('" . $userid . "','" . $DATA[id] . "'," . $DATA[genre] . "," . $DATA[type] . ",'" . $DATA[name] . "')"; //データベース実行命令 ↑ mysql_query("LOCK TABLES $CONF_dbName WRITE"); $query = mysql_query($adddata , $db ); // 実行命令を実行する。 mysql_query("UNLOCK TABLES"); }

関連するQ&A