PHP+MySQLで文字化けする問題解決方法

このQ&Aのポイント
  • PHPでMySQLに接続してテーブル作成・データ挿入をすると文字化けする問題が発生しています。
  • 問題はPHPサーバーの文字コードとMySQLの文字コードの不一致が原因であり、PHPのバージョンや無料レンタルサーバーの制約も影響しています。
  • 解決するためには、PHPとMySQLの文字コードを統一し、適切な文字コード変換を行う必要があります。
回答を見る
  • ベストアンサー

PHP+MySQLで文字化けします

PHPでMySQLに接続して以下のように テーブルの作成・そのテーブルにInsertをすると文字化けします。 PHPサーバーの文字コードはEUC-JP、MySQLの文字コードはlatin1です。 PHPのバージョンは5.04でMySQLのバージョンは4.1.20です。 無料レンタルサーバーなので詳細な設定は変更できません。 <?php // データベースに接続し、選択する mb_language('Japanese'); mb_internal_encoding('UTF-8'); mb_http_output('UTF-8'); $link = mysql_connect('localhost',"user","password") or die('Could not connect: ' . mysql_error()); echo 'Connected successfully'; mysql_select_db('user') or die('Could not select database'); mysql_query("SET NAMES UTF-8",$link); // SQL クエリを実行する $name = 'test'; $query = "CREATE TABLE IF NOT EXISTS `$name` ( `id` varchar(50) primary key, `name` varchar(50), `pw` varchar(50) );"; $result = mysql_query($query) or die('Query failed: ' . mysql_error()); $query = "INSERT INTO $name (id, name) VALUES('test', 'テスト');"; $mojicode = mb_detect_encoding($query); $query = mb_convert_encoding($query, "UTF-8", "$mojicode"); $result = mysql_query($query) or die('Query failed: ' . mysql_error()); // HTML に結果を出力する echo "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; } echo "\t</tr>\n"; } echo "</table>\n"; // 結果セットを開放する mysql_free_result($result); // 接続を閉じる mysql_close($link); ?> まだまだPHP、MySQL共に技術が未熟なため 説明不足な部分が多々あるかと思いますがご教授お願いします。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • noris02
  • ベストアンサー率74% (56/75)
回答No.1

dbで日本語文字を使う場合すこし大変ですが、db内のmysqlのテーブルをUTF-8にする必要があるようです。 その後は、createのたびに utf-8を指定してあげる必要がありそうですね。 既存データの文字コード変換はとても説明しきれないので 参照サイトをご覧ください。 http://kzworks.at.webry.info/200903/article_14.html

nemunemu170
質問者

お礼

ありがとうございます テーブルを作成時にutf-8に変更したら 日本語が入力できるようになりました。

関連するQ&A

  • mysqlの文字化け

    お世話になります。 phpmyadminを使用しており、php内からmysqlに接続しているのですが テーブル内の結果が「????」となり文字化けしてしまいます。 phpmyadmin上では正常に日本語データが表示されます。 テーブルの文字コード:utf_general_ci ソースは以下です。 <?php ~DB接続省略~ // クエリを送信する $sql = "SELECT * FROM table"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //表示するデータを作成 while($row = mysql_fetch_array($result)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["YMD"]. "</td><td>".$row["NAME"]. "</td><td>".$row["OBJECT"]. "</td>"; $tempHtml .= "</tr>\n"; } //結果保持用メモリを開放する mysql_free_result($result); // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。"); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>全件表示</title> </head> <body> <h3>全件表示</h3> <?= $msg ?> <table width = "200" border = "0"> <tr bgcolor="##ccffcc"><td>YMD</td><td>NAME</td><td>OBJECT</td></tr> <?= $tempHtml ?> </table> </body> </html> よろしくお願いします。

    • 締切済み
    • PHP
  • 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++; }

    • 締切済み
    • PHP
  • mysql_queryでDB検索をしたいが、結果が表示できない

    MYSQL関数の練習で、以下のソースを実行しました。selectDBなどの部分は省いております。 $sql_keyword = ereg_replace("[[:blank:]]+","%\" and name LIKE \"%",trim($word)); $sql = "SELECT * FROM shop where name LIKE \"%$sql_keyword%\""; $result = mysql_query($sql) or die('Query failed: ' . mysql_error()); echo "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo convert("\t\t<td>$col_value</td>\n"); } echo "\t</tr>\n"; } echo "</table>\n"; mysql_free_result($result); で行うも、エラーなども無く、結果がブランクになってしまいます。 検索する文字列($WORD)に該当するレコードは複数存在します。 エラーなどもないため、原因がわかりません。皆様のお力をお借りできればと存じます。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP MySQLでエラーがでてしまいます。

    PHP MySQLからデータを取得したいのですが、以下のエラーが出てしまい原因が分かりません。 詳しい方お願い致します。 <b>Warning</b>: json_encode() expects exactly 1 parameter, 2 given in <b>/home/users/2/***.**-********/web/****************/php/seupPharmacyData.php</b> on line <b>21</b><br /> エラーが出るコードは以下になります。 <?php include "db.php"; $sql = "SELECT * FROM user_data"; $query = mysql_query($sql, $db) or die("クエリの送信に失敗しました。<br />SQL:".$sql); $result= array(); while ($row = mysql_fetch_object($query)) { $result[] = array( 'name1' => $row->name1, 'name2' => $row->name2, 'name3' => $row->name3, 'id' => $row->id, ); } //jsonとして出力 header('Content-type:application/json; charset=UTF-8'); echo json_encode($result,JSON_UNESCAPED_UNICODE); ?>

    • ベストアンサー
    • PHP
  • mysqlと出力側PHPの文字コード変換について

    お世話になります。 現在ちょっとしたサイトを作っていてmysqlを使っています。 携帯用のサイトなのでmysql(UTF-8)⇒PHP(SHIFT-JIS)という風に PHP側でデータベースの表示をする際、UTF-8からSHIFT-JISに変換しようとしましたが、うまくいきませんでした。 http://oshiete1.goo.ne.jp/qa1764581.html などを参考に下記のようなコードを書きました。 <?php $link=mysql_connect("接続先","データベース名","パスワード"); if(!$link){ die("接続失敗"); } $db=mysql_select_db("d0295dy4db1",$link); if(!$db){ die("接続に失敗しました"); } $sql=<<<SQL select * from yougoshu ORDER BY RAND() limit 1 SQL; $result=mysql_query($sql,$link); if(!$result){ die("問い合わせに失敗しました"); } while($data = mysql_fetch_assoc($result)): $data = mb_convert_encoding("$data","SJiS-win","UTF-8"); ?> <?php echo $data['word']; ?><br /> <?php echo $data['mean']; ?><br /> <?php endwhile; ?> ちょっと荒い書き方ですが、「$data = mb_convert_encoding("$data","SJiS-win","UTF-8");」の部分をコメントアウトすれば、文字化けした内容が出力されるのは確認しています。 解決方法わかりそうな方、ご教授いただけませんでしょうか?

    • 締切済み
    • PHP
  • phpでmysqlで作成したdbを表示したい。

    現在phpのプログラムの学習を行っています。、 phpmyadminで作成したデータベースを読み込もうとしているのですが、うまくいきません。 参考書やサイトも参考にしたのですが、警告が出ています。 よくわからなくなってきましたので、教えていただきたいです。 ------------------------------------------------------------------------------- ・実行結果 Resource id #31Resource id #40 接続ID: 選択の成否: 結果ID: 行数: Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\job\job.php on line 45 ------------------------------------------------------------------------------- ・ソース <?php /*$con = mysql_connect('localhost','root','root') or die("接続できません"); print "接続に成功しました。"; mysql_close($con);*/ $url = "localhost"; $user = "root"; $pass = "***"; $db = "***"; // MySQLへ接続する $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); // データベースを選択する $sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。"); // クエリを送信する $sql = "SELECT * FROM t01prefecture"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //結果保持用メモリを開放する mysql_free_result($result); echo "$link"; echo "$sdb"; echo "$result"; echo "$rows"; echo "<br>"; echo "接続ID:<?= $link ?><br />"; echo "選択の成否:<?= $sdb ?><br />"; echo "結果ID:<?= $result ?><br />"; echo "行数:<?= $rows ?><br />"; $recordSet = mysql_query('SELECT * FROM my_items'); while($data = mysql_fetch_assoc($recordSet)){ /*このあたりが45行目 */ echo $data['item_name']; /* ここの値を変える*/ echo '<br>'; } // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。");

    • ベストアンサー
    • PHP
  • PHPから、MySQL内に日本語名のテーブルを作成する事ができません。

    PHPから、MySQL内に日本語名のテーブルを作成する事ができません。 いつも、お世話になっております。 小生、現在、WindowsXPSP3上で、Apache2.2.15とMySQL5.1.46とPHP5.2.13を使用し、PHPを勉強している、PHP初心者です。 今回質問させて頂きたいのは、PHPからMySQL内にデータベースを作成後、日本語名でテーブルを作成したいのですが、なぜか作成できません。 PHPのソースは以下の様になっています。 -----mysql.php----- <?php //MySQLに接続 $sql = mysql_connect('localhost', 'root', 'root'); if(!$sql){ print("MySQLに接続失敗" . "<br>\n"); mysql_close($sql); die(); } else{ print("MySQLに接続成功" . "<br>\n"); } //DB作成 $create_db = 'CREATE DATABASE HUMAN'; if(mysql_query($create_db, $sql)){ print("DB作成成功" . "<br>\n"); } else{ print("DB作成失敗" . "<br>\n"); mysql_close($sql); die(); } //DB選択 if(!(mysql_select_db("HUMAN"))){ print("DB選択失敗" . "<br>\n"); mysql_close($sql); die(); } //文字コードをutfに設定 mysql_query("set names utf-8"); //テーブル作成 $create_table = "CREATE TABLE 人間 (名前 VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, 年齢 INT NOT NULL, 身長 VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, 体重 VARCHAR(50) CHARACTER SET utf8 COLLATE uft8_general_ci NOT NULL, 職種 VARCHAR(50) CHARACTER SET utf8 COLLATE uft8_general_ci NOT NULL, ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;"; if(mysql_query($create_table, $sql)){ printf("テーブル作成成功" . "<br>\n"); } else{ print("テーブル作成失敗" . "<br>\n"); mysql_close($sql); die(); } //テーブルのデータを取得、表示 $select = "SELECT * FROM 人間"; if($result = mysql_query($select, $sql)){ print("データ取得成功" . "<br>\n"); } else{ print("データ取得失敗" . "<br>\n"); mysql_close($sql); die(); } while($getdata = mysql_fetch_assoc($result)){ foreach($getdata as $output){ print($output . "<br>\n"); } } //MySQLにCOMMIT文送信 $commit = "COMMIT;"; if(mysql_query($commit, $sql)){ print("コミット成功" . "<br>\n"); } else{ print("コミット失敗" . "<br>\n"); mysql_close($sql); die(); } //MySQLの接続終了 mysql_close($sql); ?> 以上です。 お忙しい中、申し訳ございませんが、先輩方ご教示宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpとMysqlの文字化け

    何度もすみません。 phpからinsertするときとphpmyadminから直接挿入するときどちらも文字化けを起こします。 phpは4.4.9でmysqlは5です。 myadminのMySQL 接続の照合順序はsjisにしております。 照合順序と保存される文字コードは違うのでしょうか。 phpファイルはsjisで保存しています。 過去の質問を見たり、調べてset name sjisとset name ujisと mb_convert_encoding($str, "EUC-JP", "SJIS");を それぞれ試しましたが文字化けのままです。 mb_convert_encoding($str, "utf-8", "SJIS"); であいうえおと入力してみたところあい???となりました。 また、adminから直接挿入した時、同じくあいうえおと入力しましたが、 こちらもあい???となりました。 adminの設定はutf-8ということのでしょうか。 照会順序以外文字コードについて表示されているところがわからなかったのですが、 どこで確認できますでしょうか。 また、php、adminともどこの設定を確認すれば良いのでしょうか? 恐れ入りますが教えていただけますでしょうか。

    • ベストアンサー
    • PHP
  • phpとmysqlが連携できない

    問題のコードです。 何度やっても失敗と表示されます。 接続は問題ないと思います。 お願いします。 $db = mysql_connect("localhost", "user", "user_パスワード", "db1") or die("Connection error"); $query = "select * from menbers"; $result = mysql_query($query, $db); if($result){ echo "成功"; }else{ echo "失敗"; }

  • PHPとMySQLで文字化けします

    <?php $con=mysql_connect("localhost","oxwar2","chono3"); $db=mysql_select_db("oxwar2",$con); $query="insert into japan(id,title,price)values(1,'絵本',1000)"; $result=mysql_query($query,$con); if($result){ print "OK"; } ?> として、実行すると上手くいきますが、phpMyadminで見ますと、日本語の部分だけが文字化けしております。 これを直すにはどうしたらよいのでしょうか。 文字コードはUTF8で作りました。色々試しても同じです。 どのようにしたらよいのでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう