PHPによるwebアプリケーションスーパーサンプルという参考書のプログラム(p552)でどうしても実行できないものがあります。
やりたいことはMySQLに接続してデータを表示させるというものです。数字であるIDと年齢は表示されるのですが、文字である名前と出身地のところが「???」で表記されてしまいます。
何度も参考書のソースプログラムを見直したのですがどこが違うのか分かりません。以下は原因がありそうなコードの抜粋です。(抜粋なのでエラーと関係なさそうなコードは途中でも省略しています。)
よろしくお願いします。
idはID、namは名前、preは出身地、agは年齢です。
//文字コード
$enc_disp = "EUC-JP";
$enc_db = "EUC-JP";
//データの文字コードを変換する
function cnv_enc($string, $to, $from){
//文字コードを変換する
$det_enc=mb_detect_encoding($string, $from.",". $to);
if($det_enc and $det_enc != $to){
return mb_convert_encoding($string, $to, $det_enc);
}
else{
return $string;
}
}
//データを取り出す
$sql="SELECT id,nam,pre,ag FROM table1 ORDER BY id";
$res=mysql_query($sql,$conn) or die("データ抽出エラー");
//取り出したデータを表示する
echo "<table border=\"1\">";
echo "<tr>";
echo "<td>ID</td>";
echo "<td>名前</td>";
echo "<td>出身</td>";
echo "<td>年齢</td>";
echo "</tr>";
while($row=mysql_fetch_array($res,MYSQL_ASSOC)){
echo "<tr>";
echo "<td>".$row["id"]."</td>";
echo "<td>".cnv_enc($row["nam"], $enc_disp, $enc_db)."</td>";
echo "<td>".cnv_enc($row["pre"], $enc_disp, $enc_db)."</td>";
echo "<td>".$row["ag"]."</td>";
echo "</tr>";
}
echo "</table>";
No.2ベストアンサー
- 回答日時:
mysqlに
show variables like "char%";
をかけるとどのような結果が出るでしょうか。
参考URLはUTF-8への設定ですが、自分も同じように文字化けした時はこれで解決しました。
ページ下の方が下記の部分が解決策です。
/etc/my.cnf
[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
utf-8をeuc-jpにすれば解決しそうですがどうでしょうか。
参考URL:http://wota.jp/ac/?date=20061011
回答ありがとうございます。
そもそもこんな関数使う必要なかったみたいです。
mysql_query("set names utf8",接続リソース)でうまくできました。
mysqldのデフォルトをutf8にするということは大変参考になりました。ありがとうございました。
No.1
- 回答日時:
お使いのphpとMySQLのバージョンはいくつでしょうか?MySQLは4.0までと4.1以降で大きく変わりました。
今現在はmysql_set_charset()でクライアントの文字セットを指定すれば、あとは自動で変換されます(自分でさらに変換すると文字化けします)。
http://php.net/manual/ja/function.mysql-set-char …
#このあたりは書籍の弱い部分なので、自分で最新の情報を収集してください。
この回答への補足
XAMPPでphpとmysqlをインストールしたのですが、XAMPPのほうに問題があるのですかね?
ApacheFriends XAMPP version 1.7.7です。
いろいろ試していますが、全然できません。助けてください。
C:\Windows\System32>mysql --version
mysql Ver 14.14 Distrib 5.5.16, for Win32 (x86)
C:\Windows\System32>php --version
PHP 5.3.8 (cli) (built: Aug 23 2011 11:50:20)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
というバージョンらしいです。このバージョンだと上記のようなコードではいけないのですかね?
まだ、PHPを始めたばかりで基礎もままならない状態なので最新の情報を収集するという作業に非常に苦労しています。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Dosブロンプトでtabを出力したい
-
shシェルスクリプト 空白行の...
-
コマンドプロンプト フォルダ内...
-
バッチファイルでpingの結果を...
-
XMLのタグの有無をPHPで判定し...
-
バッチファイルで、全てのウィ...
-
findstrのerrorlevel
-
phpで、可変項目のcsvデータ...
-
ゼロとNULLを区別して number_f...
-
syntax error, unexpected 'ech...
-
phpでcookieがうまく保存されない
-
シェルで正規表現 YYYY/MM/DD
-
PHPで値を表示する「echo」「pr...
-
Windowsのsetコマンドでの小数...
-
この条件を成立させるには
-
DTOとEntityの差は何ですか。
-
Yahoo! JAPAN IDを新規取得でき...
-
wordの差し込み印刷で文字...
-
URLのパラメータをGETのままで...
-
「取得先」という表現について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Dosブロンプトでtabを出力したい
-
バッチファイルでpingの結果を...
-
shシェルスクリプト 空白行の...
-
phpでcookieがうまく保存されない
-
switch()文で値の大小比較
-
findstrのerrorlevel
-
syntax error, unexpected 'ech...
-
バッチファイルで、全てのウィ...
-
小数点以下0の非表示
-
ゼロとNULLを区別して number_f...
-
オブジェクトの中身の判定(PHP)
-
Windowsのsetコマンドでの小数...
-
XMLのタグの有無をPHPで判定し...
-
PHP一覧表示した項目にリンクを...
-
batファイルでPC名称の変更
-
フォームから送った半角カナの...
-
DBのハッシュ化したパスワード...
-
pdftkを使った処理をバッチファ...
-
WindowsのイベントログをExcel...
-
php mysql SELECT文でテーブル...
おすすめ情報