![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になります。
PHPでmysqlのデータをhtmlで表示するソースを組んでいます。
初心者なもので、サンプルを見ながら組んでいるのですが、
そのサンプルがmysql_queryなどを使っていました。
しかし、今は推奨されず、mysqli_queryなどを使うとか。
そこで、単純にiを付け加えただけなのですが、そう簡単に
行きませんでした。
どの部分をどのように修正すればよいのかを教えてください。
-------------------------------------------------
<?php header("Content-Type:text/html;charset=SHIFT_JIS"); ?>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
$srv = "localhost"; // サーバー名
$id = "xxxxx"; // ユーザーID
$passwd = "xxxxx"; // パスワード
$dbn = "sample"; // データベース名
$sql = "SELECT * FROM sample1"; // SQL文
// データベースに接続する
$db = mysql_connect($srv,$id,$passwd);
mysql_select_db($dbn,$db);
$rs = mysql_query($sql,$db);
$num = mysql_num_fields($rs);
//--- テーブルのレイアウト --- 開始 ----------------------->
print("<TABLE border='1'><TR>");
for($i=0; $i<$num; $i++) {
print("<TH>".mb_convert_encoding(mysql_field_name($rs,$i),"SJIS","EUC-JP")."</TH>");
}
print("</TR>");
while($row = mysql_fetch_array($rs)) {
print("<TR>");
for($j=0; $j<$num; $j++) {
print("<TD>".mb_convert_encoding($row[$j],"SJIS","EUC-JP")."</TD>");
}
print("</TR>");
}
print("</TABLE>");
mysql_free_result($rs);
mysql_close($db);
//--- 終了 --->
?>
</BODY>
</HTML>
----------------------------------------------
他サイト様からの引用ですが、何卒よろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>書き直したソースには、utf8で記述してあると思いますが…。
書き直したソースにあるのは「DSNでのcharset指定」がutf8という部分だけです。MySQLサーバに「データをutf-8でください」と頼んでいるだけですね。headerでのcontent-typeの出力については何の(修正した)記述もありません。
MySQLからutf-8で受け取ったデータをそのまま出力していても、httpレスポンスでcharsetをSJISに指定していますからブラウザはShift_JISだと思って処理します。つまり確実に化けます。ブラウザが適用しているエンコードを確認してください。
いっそheader出力がない方が(ブラウザの自動判別にまかせた方が)化けない可能性が高いです。が、どうせやるなら
<?php header("Content-Type:text/html;charset=utf-8"); ?>
に書き直してください。
この回答への補足
またまた説明が不足していたとも思いますが、
php(html)ベースの文字コードはもちろんutf-8で保存してあります。
ブラウザの文字コードがutf-8のときは、一般のテキスト部分が正しく表示され、
データベースから読み取った部分が『????』になり、
エンコードを『Shift-JIS』にすると、一般のテキストが文字化けを起こし、
データベースの部分だけが正しくひょうじされまた。
その為、ブラウザでの認識する文字コード云々は、今回は関係ありません。
また、記述したソースは問題の部分のみを記述したものであり、phpのソース全体を
記載したわけではありません。
>>希望は、文字列は『utf-8』で表示させようとしています。
>であれば、どう考えても
>><?php header("Content-Type:text/html;charset=SHIFT_JIS"); ?>
>これはマズイですよね。
この部分は、弐回目に記述したソースには含まれていないのですが、
単に弐回目のソースを見ていなかっただけでは?
大変申し訳ありませんが、論点がずれているようです。
No.3
- 回答日時:
>希望は、文字列は『utf-8』で表示させようとしています。
であれば、どう考えても
><?php header("Content-Type:text/html;charset=SHIFT_JIS"); ?>
これはマズイですよね。
No.2
- 回答日時:
>日本語の文字列が
>全て『?』で表示されてしまいます。
DSNでクライアント(phpスクリプト)の文字セットを指定していますか?
http://php.net/manual/ja/ref.pdo-mysql.connectio …
提示されたソースであれば、下記のような接続になっているハズですが如何でしょうか
$pdo = new PDO("mysql:host=localhost;dbname=sample;charset=sjis", "xxxx", "xxxx");
#もしこれで化けるようだったら、phpのバージョンを書いてください
可能であればShift_JISなど使わず、utf-8(DSNではcharset=utf8)。で書いた方がいいとは思いますが・・・
この回答への補足
ご回答ありがとうございます。
説明不足で申し訳ありません。
希望は、文字列は『utf-8』で表示させようとしています。
my.iniの修正だとは思うのですが、古いバージョンのmysqlの設定しか
やったことがないので、詳しくは解りません。
行ったことといえば、データベースの照合順序を『utf8_unicode_ci』に
したことくらいです。
ちなみに、修正したソースコードは、
<?php
$dsn = 'mysql:dbname=catsule;host=localhost;charset=utf8;';
$user = 'root';
$password = '';
try{
$dbh = new PDO($dsn, $user, $password);
print('接続に成功しました。<br>');
//$dbh->query('SET NAMES sjis');
$sql = 'SELECT * FROM data';
foreach ($dbh->query($sql) as $row)
{
print($row['id']);
print($row['name'].'<br>');
}
}catch (PDOException $e){
print('Error:'.$e->getMessage());
die();
}
?>
で、PHPのVerは5.4.22です。
お手数をおかけしますが、よろしくお願いいたします。
No.1
- 回答日時:
引数の順番はMysql関数とMysqli関数で真逆になっているものが多いので、マニュアルですべて確認してください。
目次はオブジェクト指向型が見出しになっているので注意を。Mysqli
http://jp2.php.net/mysqli/
但し、単に手続き型のMysqliに書き換えるよりはオブジェクト指向の方が推奨されるでしょう。(マニュアルもそちらが主体的になっていますし)
さらに、オブジェクト指向で書くならばMysqliよりもっと扱いやすいPDOというものもあります。詳しくは下記にて。
PHPでデータベースに接続するときのまとめhttp://qiita.com/mpyw/items/b00b72c5c95aac573b71
この回答への補足
早速のご回答、ありがとうございます。
PDOを使用してみたところ、簡単に取得するところまでできました。
しかし、私の方の設定が間違っているのか、日本語の文字列が
全て『?』で表示されてしまいます。
これはMySQL側の設定だということは解るのですが、XAMPPが1.8になってから
(説明し忘れましたが、XAMPP1.8.xxを使用しています)、my.iniの設定も
変わり、どのように設定するのかが解らなくなってしまいました。
この質問内で聞く内容とは違う竹、補足として付け加えましたが、
もし続けてお教えいただけるのならば幸いです。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ボタンのonclick時における関数...
-
PHP+MYSQL IF文の初歩
-
縦に長い<table>でなく横に長い...
-
mysqlからmysqliへの変更点
-
実行時エラー3131 FROM 句の構...
-
テキストボックスに入れた内容...
-
MySQLでデータベースにデータin...
-
SQL文の実行に失敗しました???
-
ResultSetインターフェイスでの...
-
VBAをつかってクエリの情報を抽...
-
syntax errorの原因について
-
codeigniter 複数モデルでトラ...
-
アラートでyes noを作りたいです。
-
SQLで返り値が空とでる
-
SELECT COUNTで取得した結果の表示
-
JAVA SQLServerException 列名 ...
-
例外処理
-
<VB.NET>INSERT文でDBにデータ...
-
VBA ACCESS SQL...
-
データベースに存在するデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpのエラーについてです
-
テーブルに入っているデータと...
-
sqlから多次元配列に要素を格納...
-
PHPで絞り込み検索結果の件数を...
-
MySQLのデータを使ってプルダウ...
-
XAMMPが起動しません。
-
mysql_fetch_objectのエラー
-
mysql_resultのエラー
-
CSVをダウンロードさせた際、CS...
-
stringaddslashes 半角¥が消える
-
「mysqlclient」の事が分からな...
-
XAMPPで画面が真っ白になります。
-
会員登録したらメールが送られ...
-
PHP+mysqlでSQL文に文字数制限...
-
変数同士の引き算が出来ない
-
連想二次元配列のUNIXTIMEでの...
-
PHP/MySQL SQLエラーについて。
-
PHPでMySQLのレコードを削除したい
-
すいません。
-
インクルードによる不具合
おすすめ情報